我已经阅读了其他线程,并且通过使用新的组 ID 解决了这个问题,但是我想了解可能导致这种情况的原因。
我有一个包含 16 个分区的主题,我设置了 session.timeout.ms=30000 和 max.poll.interval.ms=30000000。
我运行我的程序,然后按 ctrl+c,所以它没有正确关闭。在我猜测 16 次之后,我陷入了这个重新加入的问题。session.timeout.ms 是心跳超时,所以 30 秒后它应该踢我的消费者,我的分区应该“释放”对吗?还是只听我的 max.poll.interval.ms?
编辑:我仍然间歇性地收到这个错误,当它发生时我必须重新启动我的所有消费者。即使我的消费者运行良好然后他们都开始陷入重新加入(没有添加/删除消费者),也会发生这种情况。这是我在新消费者卡在该状态后尝试连接它时的错误日志:
2017-06-29 17:28:16,215 DEBUG [AbstractCoordinator] - [scheduler-1] - Sending JoinGroup ((type: JoinGroupRequest, groupId=ingestion-matching-kafka-consumer-group-dev1, sessionTimeout=30000, rebalanceTimeout=43200000, memberId=, protocolType=consumer, groupProtocols=org.apache.kafka.common.requests.JoinGroupRequest$ProtocolMetadata@b45e5583)) to coordinator kafka04-prod01.messagehub.services.us-south.bluemix.net:9093 (id: 2147483644 rack: null)
2017-06-29 17:37:21,261 DEBUG [NetworkClient] - [scheduler-1] - Node 2147483644 disconnected.
2017-06-29 17:37:21,263 DEBUG [ConsumerNetworkClient] - [scheduler-1] - Cancelled JOIN_GROUP request {api_key=11,api_version=1,correlation_id=19,client_id=ingestion-matching-kafka-consumer-dev1} with correlation id 19 due to node 2147483644 being disconnected
这些是我认为相关的第一条和最后一条消息。以下是我设置的相关超时:
session.timeout.ms=30000
max.poll.interval.ms=43200000
request.timeout.ms=43205000 # the docs said to keep this higher than max.poll.interval.ms
enable.auto.commit=false
我也应该设置 heartbeat.interval.ms 吗?这是消费者在某个后台线程中自动将心跳发送到代理的间隔(我已经阅读了文档,但由于某种原因我无法完全理解它)?