如何在具有闲置线程的Kafka Streams应用程序中避免事务到期

时间:2019-10-29 23:42:03

标签: apache-kafka apache-kafka-streams kafka-producer-api

我在关键应用程序中使用Kafka Streams,并且遇到事务在空闲线程中到期的问题。在重新平衡之后,这会导致问题,其中任务转移到生产者已过期的先前空闲线程。但是,直到生产者第一次尝试发送时,这种情况才变得明显,此时,它会抛出ProducerFencedException并关闭流。然后,我们需要回收应用程序以使其重新开始处理,这是不可接受的。

这是应用程序设置:

  • 带有2个分区的单个主题
  • 4个Spring Boot应用程序实例,每个应用程序实例运行2个流线程​​。其他实例的原因是它是一个关键应用程序,我们必须允许该应用程序的两个实例可能因服务器修补而关闭,并且通过运行多个应用程序实例(即2个)仍然具有弹性。每个应用程序都可以在SLA中自行完成全部负载

任何人对我们如何设置我们的Kafka Streams应用程序或Kafka集群以使该设置不使交易到期的见解,我将不胜感激。

相关版本:Kafka群集版本:1.0.0,Kafka客户端版本:1.1.0,Spring Boot版本:2.0.0

0 个答案:

没有答案