【问题标题】:Spring Kafka consumer often stop consume message from topic sometimesSpring Kafka消费者有时经常停止消费来自主题的消息
【发布时间】:2022-10-23 18:21:53
【问题描述】:
我正在使用 spring kafka 依赖项来构建一个 kafka 消费者来使用来自主题的消息。它经常突然停止消费消息,并且日志中没有任何错误。如果我重新启动服务,它可以正常消费消息。但它可能会在某个时刻再次停止消费消息。
无法在最大轮询间隔内消费消息,因为每条消息将在 1 分钟内处理完毕,默认的最大轮询间隔为 5 分钟。而且消息发布的频率非常低,每分钟1-2条左右。
有人遇到过这个问题吗?我该如何解决?
【问题讨论】:
标签:
java
spring
apache-kafka
【解决方案1】:
我是否正确理解您的消费者在提交之前可能需要一分钟来处理消息?这是阻塞操作吗?
我怀疑问题可能是没有发送心跳。您的消费者有一个向 Kafka 代理发送心跳的线程。默认情况下,每heartbeat.interval: 3s 发生一次。如果您的消费者正忙于发送心跳,代理可能会认为它在session.timeout.ms: 45s(旧版本中为30s)之后已经死亡。特别是在 Java 中,我看到消费者的负载如此之高,以至于在实践中发生了这种情况。
如果是这种情况
- 您应该会在经纪人告诉您消费者离开了消费者组的日志
- 您可以尝试增加
session.timeout.ms。唯一的缺点是,检测实际故障需要更长的时间。