超过 max.poll.interval.ms 后,Kafka 消费者卡住了

esq*_*rer 10 go apache-kafka librdkafka confluent-platform

当消费者在 5 分钟内(默认值 max.poll.interval.ms 300000ms)没有收到消息时,消费者会停止而不退出程序。消费者进程挂起,不再消费任何消息。

记录以下错误消息

MAXPOLL|rdkafka#consumer-1| [thrd:main]: Application maximum poll interval (300000ms) exceeded by 255ms (adjust max.poll.interval.ms for long-running message processing): leaving group
Run Code Online (Sandbox Code Playgroud)

我看到在 confluent-kafka-go 中ErrMaxPollExceeded定义了它,但无法找到它在哪里被提出。

如果出现任何此类错误,为什么程序不退出?

  • 卡夫卡 v1.1.0
  • librdkafka v1.0.0
  • confluent-kafka-go(主)

用于 kafka.Consumer 的配置

{
    "bootstrap.servers":    "private.kafka.host",
    "group.id":             "foo.bar",
    "auto.offset.reset":    "earliest",
    "enable.auto.commit":   false,
}
Run Code Online (Sandbox Code Playgroud)

dol*_*lan 4

看起来这是向 confluence-kafka-go 客户端报告的问题:https://github.com/confluenceinc/confluence-kafka-go/issues/344

它被标记为已通过此更改解决,该更改应在 librdkafka 版本 1.1.0 中发布:https://github.com/edenhill/librdkafka/commit/80e9b1ee0c0e477c02f18b130c4302240711a88d

看起来这个更改也应该在 confluence-kafka-go 版本 1.1.0 中发布:https://github.com/confluenceinc/confluence-kafka-go/tree/v1.1.0

该问题中的一些评论仍然报告说这是版本 >1.1.0 上遇到的问题。

评论者提出了一种解决方法:

使用 v1.5.2。还在无限循环中调用 ReadMessage(-1),并且在消费者离开组后没有看到重新加入,通过将超时设置为小于 max.poll.interval.ms 而不是 -1 来解决这个问题,但想知道为什么它没有重新加入预期的。

https://github.com/confluenceinc/confluence-kafka-go/issues/344#issuecomment-745014864