Как отправлять сообщения о ключах и значениях с помощью производителя консоли kafka

У меня есть вариант использования, когда мне нужно отправлять сообщения о ключевом значении с помощью Kafka Console Producer. Итак, как добиться этого с помощью команды Kafka Console Producer?


person Keshav Lodhi    schedule 28.05.2020    source источник


Ответы (2)


Я нашел решение после некоторых исследований, и решение здесь.

команда 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 в командной строке при запуске производителя.

person Keshav Lodhi    schedule 28.05.2020
comment
Как отправить только 1 сообщение? Когда я ввожу пару ключ-значение, она ожидает следующую строку. Как мне сказать, что я просто хочу отправить 1 сообщение? - person SAKURA; 04.08.2020
comment
Если вы хотите отправить только одно сообщение, отправьте его из файла, содержащего это сообщение. Синтаксис kafka-console-producer.sh --broker-list localhost:9092 --topic имя-темы --property parse.key= true --property key.separator=: ‹ filePathAndName - person Raptor0009; 12.12.2020
comment
По моему опыту, символы ", окружающие параметры --property, обязательны только в том случае, если вы хотите использовать специальный символ в качестве значения свойства. В моем случае я хотел использовать | как key.separator, и я мог заставить его работать только так: --property "key.separator=|". Спасибо за этот ответ. - person Alex MM; 13.03.2021

По умолчанию производитель не заботится о разделе темы, в который записываются сообщения, и справедливо распределяет сообщения по всем разделам темы. Производитель выбирает раздел на основе хэша ключа записи или в циклическом режиме, если у записи нет ключа.

  1. Kafka использует ключ для указания целевого раздела. Стратегия по умолчанию
    заключается в выборе раздела на основе хэша ключа или использовании алгоритма циклического перебора, если ключ имеет значение null.

  2. Kafka работает с парами ключ-значение, если ключ не указан, он будет считаться по умолчанию нулевым, а раздел будет идентифицирован как циклический.

  3. Если мы указываем ключ, сообщения/записи с одним и тем же ключом попадают в один и тот же раздел.

  4. Чтобы включить отправку полных пар ключ-значение из командной строки, нам нужно использовать два свойства, как показано ниже:

  5. характеристики

  • parse.key : если true — ключ обязателен, по умолчанию он установлен как false.

  • 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< /а>

person shasr    schedule 16.01.2021