Kafka consumer运行4天后无法接收消息 需频繁新建topic问题咨询
Kafka周期性消费失败故障排查与解决方法
1 优先核查Topic消息保留策略配置
3-4天的故障周期高度匹配默认消息保留时长规则,先确认现有故障topic的保留配置:
- 执行命令查询topic级配置:
kafka-topics.sh --describe --bootstrap-server <broker地址> --topic <故障topic名称> - 重点检查
retention.ms、retention.bytes参数:如果retention.ms设置为259200000(3天)/345600000(4天),说明消息到期后被自动清理,当consumer的消费位点落后于清理后的最小位点时,就会出现无消息可消费的情况 - 排查consumer位点提交情况:执行
kafka-consumer-groups.sh --describe --bootstrap-server <broker地址> --group <消费组名称>,确认CURRENT-OFFSET是否大于LOG-END-OFFSET,或CURRENT-OFFSET小于LOG-START-OFFSET(位点溢出)
确认是位点溢出导致的故障后,可根据业务需求调整保留时长,执行
kafka-configs.sh --alter --bootstrap-server <broker地址> --entity-type topics --entity-name <topic名称> --add-config retention.ms=2592000000(示例为30天保留),或调整消费组位点重置策略为auto.offset.reset=earliest/latest避免位点失效后无法消费。
2 核查Topic分区状态异常问题
如果保留配置无异常,排查分区是否出现无主/副本不同步问题:
- 执行
kafka-topics.sh --describe --under-replicated-partitions --bootstrap-server <broker地址>查询是否有副本不同步的分区 - 执行
kafka-topics.sh --describe --unavailable-partitions --bootstrap-server <broker地址>查询是否存在无leader的分区
若存在异常分区:检查对应broker的磁盘、网络状态,重启异常broker即可恢复分区可用性,无需重建topic。
3 核查consumer端参数配置问题
排除broker端问题后,确认consumer配置是否存在异常:
- 检查
max.poll.interval.ms参数:如果消费逻辑处理时间过长超过该阈值,消费组会主动踢出consumer,触发重平衡持续失败导致无法消费 - 检查
session.timeout.ms参数:如果值设置过小,consumer心跳超时频繁触发重平衡,最终导致消费位点提交失败、消费停滞
对应调整参数:将
max.poll.interval.ms设置为大于单批次消息最大处理时长,session.timeout.ms调整为1000030000(1030秒)适配网络波动场景。
4 核查磁盘分区inode/容量使用率
部分场景下broker所在磁盘inode占满或容量达到阈值,会触发kafka自动清理最旧的topic数据,导致位点溢出:
- 执行
df -h检查磁盘容量使用率,确认是否达到log.retention.check.interval.ms触发的清理阈值 - 执行
df -i检查磁盘inode使用率,避免小文件过多导致无法写入新索引、消费时无法读取索引文件
若磁盘资源不足:扩容磁盘或调整全局消息保留策略减少磁盘占用即可解决。
内容的提问来源于stack exchange,提问作者Bimal Kumar Dalei
相关产品推荐
相关产品推荐

