如果代理在配置属性 session.timeout.ms 到期之前没有收到心跳,Kafka会从使用者组中删除使用者 .

让我们假设为了允许消费者在处理从主题接收的消息时花费时间,我们将 session.timeout.ms 配置为相当高的值 - 足够高以允许消费者处理负载,足够低以检测潜在的故障 .

我的主要问题是为什么Kafka不会产生一个新的消费者,它会尝试从失败中恢复(如果有的话,也许消费者只需要更多的时间),而不是从组中移除消费者并将其分区重新分配给其他消费者(启动再 balancer ) .

很可能发生在所谓的死亡消费者身上的事情可能发生在集团中的其他消费者身上,从而导致一个空的消费者群体,这将意味着话题消费的结束 .

当我正在使用 session.timeout.ms 并根据消费者线程为了适应从代理接收的负载所花费的时间来调整它时,这发生在我的部署中 .

更多关于这个主题:

  • 是否有一些我不知道的恢复机制或是故意这样设计的?

  • 在将消费者线程标记为死时,代理可能会产生某种异常,我可以使用它来自己生成恢复线程吗?

//编辑使用spring-integration-kafka 2.1.0,它依赖于spring-kafka 1.1.0和Kafka broker 0.11.0.3