Kafka Tools
定义与作用
Kafka 发行版自带了一套 Shell 脚本,覆盖了开发、测试、运维的大部分需求。掌握这些工具是高效操作 Kafka 的前提。本节以功能分类方式介绍各核心工具及其常用命令。
工具全景
完整示例
示例一:消费组管理
# 列出所有消费组
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
# 查看消费组详情(含 Lag)
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
--group order-processor --describe
# GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG
# order-processor orders 0 15234 15234 0
# order-processor orders 1 12890 12900 10
# 重置 Offset 到最早(消费者组必须无活跃成员)
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
--group order-processor --topic orders --reset-offsets --to-earliest --execute
# 重置到指定时间
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
--group order-processor --topic orders \
--reset-offsets --to-datetime 2026-06-01T00:00:00.000 --execute
# 删除消费组
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
--group old-group --delete
示例二:性能基准测试
# Producer 压测(1 千万条,每条 100 字节)
bin/kafka-producer-perf-test.sh \
--topic perf-test --num-records 10000000 --record-size 100 \
--throughput -1 \
--producer-props bootstrap.servers=localhost:9092 acks=1 \
compression.type=lz4 linger.ms=5 batch.size=65536
# 输出:
# 10000000 records sent, 476190.4 records/sec (45.41 MB/sec)
# avg latency 8.2 ms, max latency 123.5 ms
# Consumer 压测
bin/kafka-consumer-perf-test.sh \
--topic perf-test --messages 10000000 \
--bootstrap-server localhost:9092 --group perf-group
# 输出:
# 10000000 records consumed, 833333.3 records/sec (79.46 MB/sec)
示例三:日志存储分析
# 查看日志目录状态
bin/kafka-log-dirs.sh --bootstrap-server localhost:9092 --describe \
--topic-list orders,payments
# 查看日志文件内容
bin/kafka-dump-log.sh --files /data/kafka/orders-0/00000000000000000000.log \
--print-data-log
# 查看索引
bin/kafka-dump-log.sh --files /data/kafka/orders-0/00000000000000000000.index
示例四:集群元数据(KRaft 模式)
# 查看 KRaft Quorum 状态
bin/kafka-metadata-quorum.sh --bootstrap-server localhost:9092 describe --status
# NodeId LeaderId LeaderEpoch Status
# 1 1 5 Leader
# 2 1 5 Follower
# 3 1 5 Follower
# 查看副本状态
bin/kafka-metadata-quorum.sh --bootstrap-server localhost:9092 describe --replication
易错场景
易错 1:用 kafka-console-consumer.sh 在生产环境消费大量历史数据
场景:生产环境有 50GB 历史数据,启动 kafka-console-consumer.sh --from-beginning。
后果:控制台被 50GB 数据淹没,无法操作。且 Consumer Group 的 Offset 被推进到最新,影响后续消费。
正确做法:使用 --max-messages 限制输出:
bin/kafka-console-consumer.sh --topic orders --from-beginning \
--max-messages 10 --bootstrap-server localhost:9092
易错 2:重置 Offset 前忘记停止 Consumer
场景:消费者组有活跃 Consumer 时执行 Offset 重置。
后果:命令执行报错 Error: Assignments can only be reset if the group is inactive。
正确做法:先停止所有 Consumer 实例,再执行重置。
面试高频考点
Q:生产环境如何安全地扩容分区?
A:
- 无 Key 消息:直接
--alter --partitions,无副作用 - 有 Key 消息且业务依赖有序性:
- 分区扩容破坏 Key 路由 → 不同 Key 的数据混入同分区
- 需评估业务是否真的需要分区内顺序
- 如果需要,考虑在业务层用
transactional.id避免分区漂移
- 扩容后:监控新分区的 Leader 分布是否均匀;如果不均匀,手动触发 Preferred Leader 选举