Spring 卡夫卡消费者崩溃

Spring 卡夫卡消费者崩溃,spring,apache-kafka,kafka-consumer-api,spring-kafka,Spring,Apache Kafka,Kafka Consumer Api,Spring Kafka,我的应用程序使用来自Kafka 0.9的数据 目前,我们获取消息、处理和提交。在此过程中,如果使用者由于处理时间过长而无法发送心跳信号,则使用者协调器会假定使用者已死亡,并重新平衡分区。因此,总体而言,这导致了消费者数量的减少。经过一定的时间后,我们的数据处理会停止 我应该如何处理这种应用程序失败 如果协调器发现一个新的消费者已经死亡,有没有办法让消费者存活或跨越它?一个显而易见的解决方案是分析处理消息的代码,并尝试在那里做更少的阻塞工作。例如,HTTP或数据库在同一线程上调用 日志应该告诉您减

我的应用程序使用来自
Kafka 0.9
的数据

目前,我们获取消息、处理和提交。在此过程中,如果使用者由于处理时间过长而无法发送心跳信号,则使用者协调器会假定使用者已死亡,并重新平衡分区。因此,总体而言,这导致了消费者数量的减少。经过一定的时间后,我们的数据处理会停止

我应该如何处理这种应用程序失败


如果协调器发现一个新的消费者已经死亡,有没有办法让消费者存活或跨越它?

一个显而易见的解决方案是分析处理消息的代码,并尝试在那里做更少的阻塞工作。例如,HTTP或数据库在同一线程上调用

日志应该告诉您减少max.poll.records(减少轮询之间的总处理量)或增加max.poll.interval.ms(增加轮询之间的等待时间)


消费者心跳还有其他设置,但从这些设置开始0.9非常古老;在这方面有很多改进。看

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

如果您使用Spring for ApacheKafka,则至少应该使用1.3.10版;不再支持早期版本

目前的版本是2.4.3


如果您使用的是当前的spring kafka版本,则需要减少
max.poll.records
或增加
max.poll.interval.ms
您需要增加
max.poll.interval.ms
这为消费者在获取更多记录之前可以空闲的时间量设置了上限。
有关其他消费者心跳配置,请参阅

您的“死亡”消费者是否尝试重新连接?正如我所记得的,它应该在提交补偿时失败。最小化心跳,以便协调员可以知道消费者还活着。