kafka消费者什么时候会被逐出群组?

问题描述 投票:-1回答:1

我正在使用spring kafka,想知道kafka消费者什么时候会被驱逐出组。当处理时间超过投票间隔时,是否会被驱逐?如果是的话,那么心跳的目的不就是为了表明消费者还活着吗,如果发生这种情况,那么消费者就永远不应该被驱逐,除非处理过程本身失败。

apache-kafka kafka-consumer-api
1个回答
0
投票

你说的没错,心跳线程会告诉组员,消费者进程还活着。当投票间隔时间过长时,另外认为一个消费者已经消失的原因是为了防止livelock。

如果没有这一点,一个消费者可能永远不会进行投票,所以会在没有通过投票取得任何进展的情况下进行分区。

那么问题其实就是为什么会有心跳和会话超时。心跳线程实际上是在做其他的事情(预取),但我猜测它被用来检查消费者是否活着的原因是,它一般比轮询线程更频繁地与broker对话,因为后者要处理消息,所以失败的消费者进程会更早地被发现。

简而言之,有3种情况会触发重新平衡--broker端分区数量发生变化、轮询时间比不上 max.poll.interval.ms和心跳之间的间隔长于 session.timeout.ms

© www.soinside.com 2019 - 2024. All rights reserved.