这个工具干什么
kafka-console-consumer.sh 用于人工抽查主题里的消息:确认写入内容和格式是否符合预期、验证生产端与消费端能否在同一个主题上连通、以及查看位移行为。它是排障时「先看一眼数据」的最快方式,不适合用于正式消费。
抽查时最容易踩的位点问题
不带 --group 时,每次启动都会使用一个新的随机组名,因此默认从末尾开始读,要看历史必须加 --from-beginning;带 --group 时则会在该组名下提交位移,可能影响真正的业务消费组。抽查优先不带组名,避免无意中改动了线上的消费进度。
基本信息
| 常用参数 | --from-beginning、--max-messages、--partition、--offset、--timeout-ms |
|---|---|
| 增强输出 | --property print.key=true / print.timestamp=true / print.partition=true |
| 组模式 | 不带 --group 为独立随机组;带 --group 会提交位移 |
| 连接方式 | 必须使用 --bootstrap-server(旧版 --zookeeper 已在 3.0 移除) |
| 适用场景 | 抽查与验证,不作为生产消费程序 |
典型使用场景
- 核对上游写入格式:抽查几条消息确认字段与编码是否与约定一致
- 验证连通性:确认能读到刚写入的测试消息,排除网络与权限问题
- 定位分区问题:指定分区与偏移查看特定位置的数据
- 确认位移语义:观察带组与不带组时读取起点的差别
- 排查重复与丢数:对比源端最后几条消息与下游落库内容
抽查消息
抽查消息
# 从最早开始读 5 条,读完自动退出(避免一直在前台挂着)
kafka-console-consumer.sh --bootstrap-server localhost:9092 \
--topic orders --from-beginning --max-messages 5
# 指定分区与起始位置,并打印 key 与时间戳
kafka-console-consumer.sh --bootstrap-server localhost:9092 \
--topic orders --partition 0 --offset earliest --max-messages 3 \
--property print.key=true --property print.timestamp=true
# 只等 10 秒,看这期间是否有新消息到达(没有则超时退出)
kafka-console-consumer.sh --bootstrap-server localhost:9092 \
--topic orders --timeout-ms 10000常用参数读法
| 参数 | 作用 | 注意 |
|---|---|---|
| --from-beginning | 从分区最早可用位置开始读 | 大主题上会拉取海量历史,务必配合 --max-messages |
| --max-messages | 读够指定条数后退出 | 抽查必加,否则一直阻塞在前台 |
| --partition | 只读指定分区 | 单分区查看,配合 --offset 使用 |
| --offset | 起始偏移:earliest / latest / 具体数值 | 分区号与偏移同时指定,否则报错 |
| --property print.key | 输出中带上消息键 | 排查分区分配与键格式时很有用 |
交互模式下按 Ctrl+C 退出;脚本化时用管道或重定向喂入超时参数,避免任务挂死。输出的消息没有分隔符,多条消息需要靠 print.partition 与时间戳区分。
带 --group 抽查会推进该组的位移:如果误用了线上业务组名,等于替业务消费了一段数据,之后的业务消费会从新位移继续,直接造成数据缺口。