【问题标题】:Consumer is not getting down when processing time of the consumer exceeds more than max.poll.interval.ms当消费者的处理时间超过 max.poll.interval.ms 时,消费者没有下线
【发布时间】:2021-02-01 05:19:17
【问题描述】:

我正在尝试使用带有版本(2.3.7 版本)的 spring boot 在 spring kafka 上做一个简单的 poc,以实现消费者批处理的工作方式,以及如果消费者需要更多处理时间,重新平衡如何工作,因为我对此完全陌生消息系统。

现在我看到 kafka 与单个使用者重新平衡的问题(不允许并发)。

这些是我设置的属性 max.poll.interval.ms = 50000 和 factory.getContanerProperties.setIdealTimeBetweenPolls(120000) 并使消费者批处理过程花费更多 比这个 max.poll.interval.ms。 (70 秒) 我在这里看到的问题是消费者每 2 分钟间隔触发一次,因此,每 2 分钟重新平衡一次。根据我的理解实际上这不应该发生。仅应在第一次重新平衡时发生。

这里有什么我遗漏的吗?

【问题讨论】:

  • 嘿 Mr_k 我会帮忙的。你能告诉我你使用了多少个发布者和订阅者吗
  • 我们有一个主题发布者,主题有 8 个分区。并且一个消费者订阅了该主题。而且我正在尝试使用确认进行手动提交。
  • 那么您面临的问题或您想要达到的目标
  • 如果你有的话,你也可以分享你的 KafkaConsumerConfiguration
  • 对于再平衡你需要不止一个并发消费,因为你正在使用一个所以没有再平衡的概念

标签: spring-boot spring-kafka


【解决方案1】:

是的,如果您超过 max.poll.interval.ms,将始终发生重新平衡 - 代理认为您的消费者已死,因此收回分区(即使没有更多消费者)。

当您下次轮询时,会发生重新平衡,并且由于您只有一个消费者,他会再次获得所有 8 个分区。

【讨论】:

  • 感谢您的意见。感谢 harkesh kumar 和@Gary Russell。我使用并发方法(8 个消费者)进行了测试,其中 1 个消费者的时间超过轮询间隔,而其他消费者的时间较短。我观察到消费者 1 分区被租用并共享给另一个消费者,并看到发生了适当的重新平衡。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 2022-10-15
  • 2017-05-06
  • 1970-01-01
  • 2014-02-13
  • 2015-02-18
相关资源
最近更新 更多