如何使用kafka控制台生产者发送键值消息

时间:2020-05-28 16:48:20

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

我有一个用例,需要用Kafka Console Producer发送键值消息。那么如何通过Kafka Console Producer命令实现这一目标呢?

2 个答案:

答案 0 :(得分:15)

经过研究,我找到了解决方案,解决方案在这里。

kafka-console-producer命令

kafka-console-producer.sh --broker-list localhost:9092 --topic topic-name --property "parse.key=true" --property "key.separator=:"

运行此命令后,您将进入生产者控制台,然后从那里可以发送键值消息。

例如

key1:value1
key2:value2
key3:value3

为了更加清晰,我在此处提供示例键值消息,emp_info是键,JSON object是值。

emp_info: {"emp_id":100,"first_name":"Keshav","last_name":"Lodhi","designation":"DataEngineer"}

注意::仅发送文本行将产生带有null键的消息。为了同时发送keys and values和发送消息,运行生产者时必须在命令行上设置parse.keykey.separator属性。

答案 1 :(得分:3)

默认情况下,生产者不关心写入消息的主题分区,并且会在主题的所有分区上公平地平衡消息。生产者根据记录键的哈希值选择分区,如果记录没有键,则以循环方式选择。

  1. Kafka 使用 key 来指定目标分区。默认
    策略是根据键的散列选择一个分区或使用 如果密钥为空,则循环算法。

  2. Kafka 使用键值对,如果未指定键,它将被视为默认为 null,分区将被识别为循环方式。

  3. 如果我们指定key,相同key的消息/记录会进入同一个分区

  4. 要启用发送完整键值对,从命令行,我们需要使用以下两个属性:

  5. 属性

  • parse.key : 如果它是真的 - key 是强制性的,默认情况下它被设置为 假的。

  • key.separator : 如下

示例:

  • key.separator=,
  • key.separator=-
  • key.separator=:

Kafka Console Producer 命令

kafka-console-producer --broker-list MY-KAFKA:29092 --topic kafka-prod --property parse.key=true --property key.separator=,

参考:https://shashirl9.medium.com/kafka-producer-internals-d971ac582688