卡夫卡消费者崩溃

时间:2020-02-27 10:00:06

标签: spring apache-kafka kafka-consumer-api spring-kafka

我的应用程序使用了Kafka 0.9中的数据。

当前,我们获取消息,进程和提交。在此过程中,如果使用者由于更多的处理时间而无法发送heartBeat,则使用者协调器会认为该使用者已死,并重新分配分区。因此,总体而言,这导致了消费者数量的减少。在经过一定时间后,我们的数据处理将停止。

我应该如何处理这种应用程序故障?

如果协调员发现死亡,是否有任何方法可以使消费者保持生命或扩展新消费者?

3 个答案:

答案 0 :(得分:1)

一个明显的解决方案是配置处理消息的代码,并尝试减少其中的 blocking 工作。例如,在同一线程上的HTTP或数据库调用

日志应该告诉您减少最大轮询记录(减少两次轮询之间的总处理量)或增加最大轮询间隔ms(增加两次轮询之间的等待时间)

还有其他用于消费者心跳的设置,但从这些设置开始

答案 1 :(得分:1)

0.9很老了;在这方面已有许多改进。参见KIP-62

新用户的一个常见问题是其单线程设计与通过向协调器发送心跳来保持活动性的需求的结合。我们建议用户在与使用者的轮询循环相同的线程上进行消息处理和分区初始化/清理,但是如果此操作花费的时间比配置的会话超时长,则将使用者从组中删除,并将其分区分配给其他成员。 ...

如果将Spring用于Apache Kafka,则应至少使用1.3.10版本;不再支持早期版本。

当前版本为2.4.3。

如果您使用的是当前的spring-kafka版本,则需要减少max.poll.records或增加max.poll.interval.ms

答案 2 :(得分:0)

您需要增加max.poll.interval.ms的值 这为使用者在获取更多记录之前可以处于空闲状态的时间设置了上限。 有关其他消费者心跳配置,请参阅this