当Kafka群集出现故障时,Kafka Streams应用程序不会失败

时间:2017-06-29 21:31:40

标签: apache-kafka apache-kafka-streams

我正在运行Kafka Streams应用(0.10.2.1)。当我关闭Kafka群集时,流应用程序继续等待下一条消息,当群集重新启动时,它将恢复消耗消息。在群集停止期间,应用 会出现 以便正常运行。我测试了这个超过45分钟。

我希望卡夫卡能够抛出异常或停止。我已经配置了一个StateListener来记录KafkaStreams关闭时,但它永远不会被调用。

kafkaStreams.setStateListener((newState, _) => {
  if (newState == KafkaStreams.State.NOT_RUNNING) {
    Log.error("Kafka died unexpectedly.")
  }
})

如何在无法连接到群集时让Kafka抛出异常或关闭?

注意:这假设群集在应用程序启动后 <\ n>

1 个答案:

答案 0 :(得分:0)

为什么您希望Kafka Streams应用程序停止运行?

应用程序应该能够适应经纪人的失败,也就是说,在经纪人恢复之前一直耐心等待,这似乎就是它正在做的事情。如果您有多个Kafka Streams应用程序实例,并且其中一个实例失去与代理的连接,则负载将重新平衡到其余实例上。如果失去连接的每个实例都会自行关闭,那么即使代理连接恢复,您也会丢失实例并失去冗余和并行性。现在的方式Kafka Streams专为弹性而设计。我认为这是正确的行为。

恕我直言,如果您想检测代理(或连接)故障,这是一个用于监控的用例,而不是用于将故障引入Kafka Streams应用程序。