有没有办法在卡夫卡控制台生产者产生一个空值的消息(即。用墓碑把它标记给压实器删除)?
我试过制作"mykey“和”mykey“。前者产生错误,后者使值变为空字符串。像这样运行的制片人:
$KAFKA_HOME/bin/kafka-console-producer --broker-list localhost:9092 --topic mytopic --property "parse.key=true" --property "key.separator=|"
发布于 2018-08-28 12:22:08
不幸的是,使用控制台生成器是无法做到这一点的。
这是来自ConsoleProducer类的代码片段(它如何读取数据)。卡夫卡0.11.0 (不要认为它在不同版本之间有很大的变化)。
override def readMessage() = {
lineNumber += 1
print(">")
(reader.readLine(), parseKey) match {
case (null, _) => null
case (line, true) =>
line.indexOf(keySeparator) match {
case -1 =>
if (ignoreError) new ProducerRecord(topic, line.getBytes(StandardCharsets.UTF_8))
else throw new KafkaException(s"No key found on line $lineNumber: $line")
case n =>
val value = (if (n + keySeparator.size > line.size) "" else line.substring(n + keySeparator.size)).getBytes(StandardCharsets.UTF_8)
new ProducerRecord(topic, line.substring(0, n).getBytes(StandardCharsets.UTF_8), value)
}
case (line, false) =>
new ProducerRecord(topic, line.getBytes(StandardCharsets.UTF_8))
}
}
如您所见,该值始终是一个不可空的字节数组。
发布于 2020-01-23 12:50:43
看看卡卡 (卡夫卡的网猫)。引用医生的话:
为键"abc“生成墓碑(压缩主题的”删除“),提供一个空消息值,-Z将其解释为NULL: 回声"abc:“\x{e76f} kafkacat -b mybroker -t mytopic -Z -K:
https://stackoverflow.com/questions/52057588
复制相似问题