Kafka同一消费组消费异常:仅单消费者全量消费且生产者仅写入单分区
Kafka分区数据分发问题排查与解决
操作步骤
1. 创建3分区Topic
$ kafka-topics.sh --topic fifth_topic --create --partitions 3 --replication-factor 1 --bootstrap-server=localhost:9092
2. 向Topic生产数据
$ kafka-console-producer.sh --bootstrap-server imeserver:9092 --topic fifth_topic
3. 启动同一消费组的3个消费者
$ kafka-console-consumer.sh --bootstrap-server imeserver:9092 --topic fifth_topic --group consumer_grp2 --from-beginning $ kafka-console-consumer.sh --bootstrap-server imeserver:9092 --topic fifth_topic --group consumer_grp2 --from-beginning $ kafka-console-consumer.sh --bootstrap-server imeserver:9092 --topic fifth_topic --group consumer_grp2 --from-beginning
4. 查看消费组信息
[ime@IMESERVER ~]$ kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group 'consumer_grp2' GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID consumer_grp2 fifth_topic 2 0 0 0 console-consumer-b6abaa2e-bf84-4919-8606-183dda964c17 /127.0.0.1 console-consumer consumer_grp2 fifth_topic 0 0 0 0 console-consumer-2077d1c1-5a79-4b02-93b5-fd7c22d584e4 /127.0.0.1 console-consumer consumer_grp2 fifth_topic 1 40 40 0 console-consumer-8df7c698-315a-463c-b0dd-13fa6932011f /127.0.0.1 console-consumer
问题现象
所有生产的数据仅写入单个分区,未分发至其他分区,无法实现消费组内消费者各自消费对应分区的预期效果。
解决方案
1. 生产者端指定分区键(Key)
Kafka默认分区逻辑:带Key的消息会按Key哈希值分配到对应分区;无Key消息默认轮询分发到各分区。但控制台交互模式下,默认发送的消息无Key,可能因会话保持导致一直写入同一分区。
解决方式:启动生产者时开启Key解析功能,按key:value格式发送消息:
$ kafka-console-producer.sh --bootstrap-server imeserver:9092 --topic fifth_topic --property parse.key=true --property key.separator=:
输入示例:
1:msg1 2:msg2 3:msg3
不同Key的消息会被分发到不同分区。
2. 重启生产者会话
若控制台生产者持续写入同一分区,可能是会话内轮询逻辑未触发,关闭当前生产者终端,重新启动新会话后发送消息,即可恢复轮询分发。
3. 验证Topic分区配置
确认Topic分区数及状态正常:
$ kafka-topics.sh --describe --topic fifth_topic --bootstrap-server localhost:9092
确保输出中Partitions字段显示为3,且各分区状态无异常。
内容的提问来源于stack exchange,提问作者Ahmed Shamma
相关产品推荐
相关产品推荐

