我有一个用例,需要用Kafka Console Producer发送键值消息。那么如何通过Kafka Console Producer
命令实现这一目标呢?
答案 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.key
和key.separator
属性。
答案 1 :(得分:3)
默认情况下,生产者不关心写入消息的主题分区,并且会在主题的所有分区上公平地平衡消息。生产者根据记录键的哈希值选择分区,如果记录没有键,则以循环方式选择。
Kafka 使用 key 来指定目标分区。默认
策略是根据键的散列选择一个分区或使用
如果密钥为空,则循环算法。
Kafka 使用键值对,如果未指定键,它将被视为默认为 null,分区将被识别为循环方式。
如果我们指定key,相同key的消息/记录会进入同一个分区
要启用发送完整键值对,从命令行,我们需要使用以下两个属性:
属性
parse.key : 如果它是真的 - key 是强制性的,默认情况下它被设置为 假的。
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