这个工具干什么
kafka-console-producer.sh 用于向主题发送测试消息:默认按行读取标准输入,每输入一行就发送一条消息。它适合验证链路连通性、验证消费端对消息格式的解析、以及制造少量测试数据触发下游任务,不适合用于生产批量灌数。
带键发送
默认发送的消息没有键,分区由客户端策略决定。若要验证「同一业务键落同一分区」这类逻辑,需要开启键解析并指定分隔符:开启后每行按分隔符切成键与值两部分,没有分隔符的行会被整体当作键发送,这是最容易被忽略的细节。
基本信息
| 用途 | 发送测试消息、验证序列化与分区行为 |
|---|---|
| 输入方式 | 标准输入按行;可重定向文件或管道批量灌入 |
| 带键发送 | --property parse.key=true 与 key.separator |
| 覆盖配置 | --producer-property 可覆盖 acks、压缩等生产者参数 |
| 退出方式 | 交互模式按 Ctrl+D 结束(EOF) |
常用参数读法
| 参数 | 作用 | 注意 |
|---|---|---|
| --topic | 目标主题 | 必须先确认主题存在 |
| --property parse.key | 按分隔符解析键与值 | 为 true 但行内无分隔符时整行作为键 |
| --property key.separator | 键与值之间的分隔字符 | 需与消息内容本身不冲突 |
| --producer-property | 覆盖生产者配置 | 可验证 acks、压缩等参数下的行为 |
| --request-required-acks | 旧版本参数,指定确认级别 | 新版本建议用 --producer-property acks |
典型使用场景
- 连通性验证:往主题发一条消息,确认消费端能收到
- 格式验证:用真实格式的 JSON 验证下游解析逻辑
- 键与分区验证:指定键后确认消息落入预期的分区
- 触发下游:制造一条特殊事件触发告警或补数流程
- 参数验证:用不同生产者配置发送,观察延迟与错误行为
基本用法
基本用法
# 交互发送:每行一条消息
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic orders
# 输入并回车即发送:
# {"order_id": "o-1001", "amount": 9.9}
# 带键发送:开启键解析并指定分隔符(这里用冒号)
kafka-console-producer.sh --bootstrap-server localhost:9092 \
--topic orders --property parse.key=true --property key.separator=:
# 输入:o-1001:{"amount":9.9}
# 脚本批量灌入:从文件读取,按行发送
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic orders < /tmp/orders.txt
# 验证高持久性配置下的发送行为
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic orders \
--producer-property acks=all脚本化时用文件重定向或 heredoc 比交互输入更稳:交互输入容易受终端粘贴的转义与换行影响,特殊字符在 shell 层就可能被改写。
控制台生产者不做重试管理、不做幂等、也没有监控:用它在正式主题上批量灌数,一旦中途失败无法判断发送到哪一条,只能靠消费端比对。