【问题标题】:How to send 1 Kafka message with a key?如何使用密钥发送 1 条 Kafka 消息?
【发布时间】:2020-08-05 14:27:20
【问题描述】:

我正在使用这个命令:bin/kafka-console-producer.sh --bootstrap-server url --topic Notifications --property "parse.key=true" --property "key.separator=:"

我输入这个命令,然后输入:

1: {"producer": 4, "message": {"created_date": "2020-08-04 15:03:19.063196"}}

然后它立即期待第二行。但我只想发送 1 条消息,所以我再次按 Enter,然后得到

org.apache.kafka.common.KafkaException: No key found on line 2: q at kafka.tools.ConsoleProducer$LineMessageReader.readMessage(ConsoleProducer.scala:289) at kafka.tools.ConsoleProducer$.main(ConsoleProducer.scala:51) at kafka.tools.ConsoleProducer.main(ConsoleProducer.scala)

【问题讨论】:

  • 我会在另一个终端实例中同时运行 cli 消费者,以查看消息是否进入队列。如果消息发送成功,生产者将显示一个新的行输入。
  • 发送第一条消息后,按 Ctrl+C 退出控制台生产者。

标签: apache-kafka kafka-consumer-api kafka-producer-api


【解决方案1】:

我认为消息实际上已发送。 kafka-console-producer 逐行接受输入。每一行(当您按 [Enter] 输入换行符时)都会向主题提交一条消息。之后kafka-console-producer 继续等待下一个输入,如果您发送更多消息。但是,因为对于下一个输入,您尝试发送一个空字符串,它确实不会解析并产生错误。但是,此错误仅适用于第二个条目。第一条消息通常应该在那个时候已经发送。

正如@Patrick Kelly 在 cmets 中所建议的那样,您可以通过在相关主题上运行消费者并查看其中的内容来确认这一假设。例如,在kafka-console-producer 提示符中输入消息的同时运行kafka-console-consumer。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 2021-09-16
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    相关资源
    最近更新 更多