当前位置: 首页 > 知识库问答 >
问题:

Kafka事务在超时时中断当前线程后不会回滚

钱元徽
2023-03-14

如果http请求超时,我试图中断当前线程。我已经为Kafka事务设置了PlatformTransactionManager作为bean。我在方法级别使用@Transactional注释。我们将发布三个主题的信息。在第一个主题中发布消息后,我将添加线程。睡眠(5000),如果执行时间超过6秒,当前线程将从筛选器中断。所以这里的通话被打断了,但信息被发布给了Kafka。我们只是在传达信息。我们不消费任何信息,但能够在内部Kafka检查工具中看到信息。我们正在使用KafkaTemplate。send()发送消息。

共有1个答案

李胡媚
2023-03-14

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

消费者的隔离。默认情况下,级别read_uncommitted;您需要将其设置为read_committed,以避免看到回滚的记录。

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

 类似资料:
  • 我正在使用版本来使用来自主题的消息。在使用者配置中,自动提交设置为,而设置为。与服务器协商为10秒。 在收到消息后,我将它的一部分保存到数据库中。我的数据库有时会非常慢,这会导致kafka侦听器会话超时: 组MyGroup得自动偏移量提交失败:无法完成提交,因为组已重新平衡并将分区分配给另一个成员.这意味着对poll()的后续调用之间的时间比配置的session.timeout.ms长,这通常意味

  • 问题内容: 我正在寻找可以提供超时的ExecutorService实现。如果提交到ExecutorService的任务花费的时间超过了超时时间,则这些任务将被中断。实现这样的野兽并不是一个困难的任务,但是我想知道是否有人知道现有的实现。 这是我根据以下一些讨论得出的。任何意见? 问题答案: 你可以为此使用ScheduledExecutorService。首先,你只提交一次即可立即开始,并保留创建的

  • 我需要实现一个预定的执行器服务,它每隔x秒运行一个线程。线程执行应该中断,以防它需要超过y秒。我曾尝试使用SchduledExecutorService实现该解决方案,该解决方案具有可配置的间隔参数,但没有超时参数。我有一些想法,我想听听你对实现/技术的建议。

  • 编辑: 主要问题:为什么只有一个线程抛出interruptedexception,而两个线程都阻塞在条件上。await 所以下面的代码只是我创建的一个示例。主要的问题是开发一个生产者-消费者实现,在这个实现中,我必须创建一个模拟类,它产生两种线程:客户线程和厨师线程,这两种线程是基于可重入锁进行同步的。在执行一些操作(客户添加订单,厨师执行服务这些订单)后,我调用客户线程上的join以确保所有订单

  • 问题内容: 我正在使用Hibernate + spring + 批注来处理我的应用程序中的事务。 事务管理器声明如下: 在大多数情况下,此方法效果很好,但是我发现一个问题,我有2种方法,都标有@Transactional: 和 当我调用OuterTestService#outerMethod()时,出现异常 由于只有一个事务(没有嵌套事务),因此整个事务都标记为“仅回滚”。 我发现可以使用noRo

  • 错误: 正如我所说的,如果我用@Transactioanl(以及服务方法)注释DAO函数,这会起作用,但我不明白为什么。