Kafka集群中2个分区无法写入消息的问题求助
Kafka分区写入异常排查方案
以下是针对0、3号分区无消息写入问题的具体排查步骤:
检查Producer分区策略与发送逻辑
- 确认是否使用自定义分区器:查看Producer代码或配置,若自定义了分区逻辑,检查是否存在跳过0、3分区的错误逻辑;
- 验证key的哈希分布:若发送消息时指定了key,计算key的哈希值对应的分区,确认是否所有key的哈希都未命中0、3分区;
- 检查是否手动指定了分区:查看Producer发送代码,是否在创建
ProducerRecord时固定指定了1、2、4、5号分区。
查看分区状态与元数据
- 执行命令查看Topic分区详情:
重点确认0、3分区的Leader节点、ISR列表是否正常,是否存在kafka-topics.sh --describe --topic <你的Topic名称> --bootstrap-server <Broker地址>:9092Offline: true等异常状态; - 检查分区副本同步状态:确认0、3分区的所有副本是否处于同步状态,若存在副本滞后过多,可能影响Producer写入。
- 执行命令查看Topic分区详情:
排查Producer端日志
- 开启Producer的DEBUG级别日志(修改log4j配置:
log4j.logger.org.apache.kafka.clients.producer=DEBUG),查看发送消息时针对0、3分区的日志,是否存在发送失败、重试或被跳过的记录。
- 开启Producer的DEBUG级别日志(修改log4j配置:
检查Broker端分区限制
- 查看Topic或分区的配额配置:
确认0、3分区是否被设置了写入配额(如kafka-configs.sh --describe --topic <你的Topic名称> --bootstrap-server <Broker地址>:9092producer_byte_rate)或其他限制策略,导致无法写入。
- 查看Topic或分区的配额配置:
验证分区写入能力
- 使用命令行Producer直接向0、3分区发送测试消息:
输入消息时指定能命中0、3分区的key,验证是否能正常写入。kafka-console-producer.sh --broker-list <Broker地址>:9092 --topic <你的Topic名称> --property "parse.key=true" --property "key.separator=:"
- 使用命令行Producer直接向0、3分区发送测试消息:
内容的提问来源于stack exchange,提问作者Shekel
相关产品推荐
相关产品推荐

