【问题标题】:Kafka Transactions are not rolling back after interrupting current thread on timeout在超时中断当前线程后,Kafka 事务不会回滚
【发布时间】:2021-09-07 23:44:23
【问题描述】:

如果 http 请求超时,我会尝试中断当前线程。我已将 Kafka Transactions 的 PlatformTransactionManager 设置为 bean。我在方法级别使用@Transactional 注释。我们在 3 个主题中发布消息。在第一个主题中发布消息后,我将 Thread.sleep(5000) 放入,如果执行时间超过 6 秒,当前线程将从过滤器中中断。所以这里的电话被打断了,但消息被发布到了 Kafka。我们只是在生产信息。我们没有使用任何消息,但能够在我们的内部 Kafka 检查工具中看到消息。我们正在使用 KafkaTemplate.send() 发送消息。

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: java apache-kafka spring-kafka


【解决方案1】:

生产者记录始终写入日志,即使已回滚。在已发布记录之后的槽中有一条特殊记录,用于指示事务是提交还是回滚。

消费者的isolation.level默认为read_uncommitted;您需要将其设置为 read_committed 以避免看到回滚记录。

https://kafka.apache.org/documentation/#consumerconfigs_isolation.level

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 2017-09-11
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2021-05-24
    相关资源
    最近更新 更多