Apache kafka 从控制台生成带有空值(墓碑)的卡夫卡消息

Apache kafka 从控制台生成带有空值(墓碑)的卡夫卡消息,apache-kafka,kafka-producer-api,Apache Kafka,Kafka Producer Api,是否有任何方法可以在kafka控制台生成器中生成具有空值的消息(即,标记消息以便压缩程序使用墓碑删除它) 我试过制作“我的钥匙”和“我的钥匙”。前者产生一个错误,后者将该值作为空字符串。像这样运行producer: $KAFKA_HOME/bin/kafka-console-producer --broker-list localhost:9092 --topic mytopic --property "parse.key=true" --property "key.separator=|"

是否有任何方法可以在kafka控制台生成器中生成具有空值的消息(即,标记消息以便压缩程序使用墓碑删除它)

我试过制作“我的钥匙”和“我的钥匙”。前者产生一个错误,后者将该值作为空字符串。像这样运行producer:

$KAFKA_HOME/bin/kafka-console-producer --broker-list localhost:9092 --topic mytopic --property "parse.key=true" --property "key.separator=|"

不幸的是,使用console producer无法做到这一点

这是来自ConsoleProducer类(它如何读取数据)的代码片段。卡夫卡0.11.0(不要认为它在不同版本之间发生了重大变化)

如您所见,该值始终是一个不可为空的字节数组。请看一看(kafka的netcat)。引用文件:

通过提供一个空消息值来为键“abc”生成一个墓碑(压缩主题的“删除”),该空消息值-Z解释为空:

echo "abc:" | kafkacat -b mybroker -t mytopic -Z -K:

它在Kafka 2.0中已经从ScalaThanks Natalia更改为Java代码,看起来您是正确的,因为它在最新版本中没有更改。我也不认为我可以为getBytes传递一个UTF-8空字符来进行解析。我有点惊讶他们这样处理“case-1”,因为用户必须显式地传递“parseKey”才能进入该块。因此,我认为应该清楚的是,传递的是键,并且可以将值赋值为null。无论如何,用改变重建应该很容易。谢谢你的帮助!投票支持增强:仅供参考kafkacat目前不支持生产avro的能力messages@MarioP. 我每天都这样做:
kafkacat-b mybroker-t topic-s avro-rhttp://schema-registry-url:8080
echo "abc:" | kafkacat -b mybroker -t mytopic -Z -K: