【发布时间】:2020-09-16 02:09:38
【问题描述】:
我有一个用例,我需要使用 Kafka 控制台生产者发送键值消息。那么如何通过Kafka Console Producer命令来实现呢?
【问题讨论】:
标签: apache-kafka kafka-consumer-api kafka-producer-api
我有一个用例,我需要使用 Kafka 控制台生产者发送键值消息。那么如何通过Kafka Console Producer命令来实现呢?
【问题讨论】:
标签: apache-kafka kafka-consumer-api kafka-producer-api
经过一番研究,我找到了解决方案,解决方案就在这里。
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 属性。
【讨论】:
--property 参数周围的 " 字符只有在您想使用特殊字符作为属性值时才是强制性的。就我而言,我想使用| 作为key.separator,我只能让它像这样工作:--property "key.separator=|"。感谢您的回复。
Ctrl+C 终止进程。您可以在官方快速入门页面上阅读此内容。
默认情况下,生产者不关心消息写入的主题分区,并且会在主题的所有分区上公平地平衡消息。生产者根据记录键的哈希选择分区,如果记录没有键,则以循环方式选择。
Kafka 使用 key 来指定目标分区。默认
策略是根据键的散列选择一个分区或使用
如果密钥为空,则循环算法。
Kafka 使用键值对,如果未指定键,它将被视为默认为 null,并且分区将被识别为循环方式。
如果我们指定键,具有相同键的消息/记录会进入同一个分区
要启用发送完整的键值对,在命令行中,我们需要使用以下两个属性:
属性
parse.key : 如果它是 true - key 是强制性的,默认情况下它被设置为 假的。
key.separator : 如下
例子:
Kafka 控制台生产者命令
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
【讨论】: