首页/数据/数据工程与 ETL 速查/kafka-console-producer.sh 生产测试消息
Kafka64 条

kafka-console-producer.sh 生产测试消息

控制台生产者用于连通性验证与小批量灌数:默认按行读取标准输入写入指定主题,可开启 key 解析与自定义生产者属性。

这个工具干什么

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 层就可能被改写。
控制台生产者不做重试管理、不做幂等、也没有监控:用它在正式主题上批量灌数,一旦中途失败无法判断发送到哪一条,只能靠消费端比对。

易错点

  • 粘贴含特殊字符的消息时被 shell 转义或截断,实际写入内容与预期不符,脚本化时应改用文件重定向
  • parse.key 设为 true 但行内没有分隔符,整行被当作键发送,消息内容为空
  • 用控制台生产者往生产主题批量灌数,失败后无法判断断点位置,重复与漏发难以核对
  • 在交互模式直接 Ctrl+C 退出,缓冲中的消息可能未发送完毕,误以为已发送成功

数据来源与参考

  • Apache Kafka 官方文档:Console Producer 使用说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌