如何使用kafka-console-producer发送键值对避免被额外JSON编码
解决kafka-console-producer发送JSON键值被二次编码的方案
问题排查第一步:确认是否为消费输出的观测误差
你看到的转义符和外层双引号大概率是消费端输出格式导致的,而非消息本身真的被编码:
如果之前消费时指定了JSON格式输出,控制台会自动将字符串类型的键、值序列化为JSON字段,自动添加外层双引号、转义内容中的双引号。
你可以用以下基础消费命令验证真实消息内容:
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic --from-beginning --property print.key=true --property key.separator="||"
如果输出的键值没有多余转义和外层引号,说明消息本身符合预期,不需要修改生产者配置,后续消费时按需调整输出格式即可。
问题排查第二步:调整生产者配置避免真·二次编码
如果用上述命令验证后确认消息本身确实存在转义,修改生产者发送命令,显式指定字符串序列化器即可:
./kafka-console-producer.sh --broker-list localhost:9092 --topic topic \ --property "parse.key=true" \ --property "key.separator=;" \ --key-serializer org.apache.kafka.common.serialization.StringSerializer \ --value-serializer org.apache.kafka.common.serialization.StringSerializer \ < /message.json
额外注意点
- 请确保message.json文件中分隔键值的
;前后没有多余空白字符,避免解析时将空格带入JSON内容导致格式非法 - Kafka broker端不会修改任何消息内容,无需调整服务端配置
内容的提问来源于stack exchange,提问作者bankoff
相关产品推荐
相关产品推荐

