36人参与 • 2024-07-28 • Java
最近发现kafka rebalance次数着实有点多,一天达到了六十多次,感觉不太正常,于是查了下日志发现:
offset commit cannot be completed since
the consumer is not part of an active group for auto partition assignment;
it is likely that the consumer was kicked out of the group.
大意是某个kakfa client提交offset失败,因为已经在分组中下线。
我们来了解下什么情况下会掉线,常见情况如下:
kafka在n次心跳未收到后认为这个kafka client已经离线,于是server端会踢下线,至于n次是多少次,需要计算,有两个参数,一个是heartbeat.interval.ms
,代表多久一次心跳,默认是3000ms,也就是3秒,还有一个参数是session.timeout.ms
,代表保持session的超时时间,默认10000ms,也就是10秒。n = session.timeout.ms / heartbeat.interval.ms
,也就是说3次之后不到第四次就会被踢下线,至于为什么不是正好3倍,官网解释是heartbeat.interval.ms
的值建议小于session.timeout.ms
的 1/3
,两个参数官网解释如下:
以上来自kafka官网 https://kafka.apache.org/28/documentation.html#consumerconfigs
和这个原因有关的参数是max.poll.interval.ms
,这个参数的意思是两次poll()
操作之间如果超过了这个值,也会被服务端踢下线,默认300000ms,也就是300秒,5分钟。
以上来自kafka官网 https://kafka.apache.org/28/documentation.html#consumerconfigs
当时做性能优化的时候,这个kafka处理逻辑统计了时间于是找到了以下日志:
当前拉取了数据条数 10 耗时 411260ms thread: kafkaxxxreceiver-pool-3
处理10条数据居然用了411260ms,这是只是其中一条,通过模糊查询还找到了更多了超过300秒的数据,已经确认是这里的问题了。
max.poll.interval.ms
,或者调小每次拉取的消息数max.poll.records
。您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论