【问题标题】:How to send key, value messages with the kafka console producer如何使用 kafka 控制台生产者发送键、值消息
【发布时间】:2020-09-16 02:09:38
【问题描述】:

我有一个用例,我需要使用 Kafka 控制台生产者发送键值消息。那么如何通过Kafka Console Producer命令来实现呢?

【问题讨论】:

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


    【解决方案1】:

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

    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 条消息?当我输入键值对时,它需要下一行。如何告诉它我只想发送 1 条消息?
    • 如果您只想发送一条消息,请从包含该一条消息的文件中发送。语法 kafka-console-producer.sh --broker-list localhost:9092 --topic topic-名称 --property "parse.key=true" --property "key.separator=:"
    • 根据我的经验,--property 参数周围的 " 字符只有在您想使用特殊字符作为属性值时才是强制性的。就我而言,我想使用| 作为key.separator,我只能让它像这样工作:--property "key.separator=|"。感谢您的回复。
    • @SAKURA 不,它不是“期待”下一行。生产者 CLI 用于发送消息,每行一个。当您按 Enter 键时,该行将立即发送。如果完成,请按Ctrl+C 终止进程。您可以在官方快速入门页面上阅读此内容。
    【解决方案2】:

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

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

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

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

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

    5. 属性

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

    • key.separator : 如下

    例子:

    • key.separator=,
    • key.separator=-
    • 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

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 1970-01-01
      • 2017-02-28
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 2016-11-13
      • 2019-10-03
      相关资源
      最近更新 更多