выдвинуть несколько строк текста как одно сообщение в теме кафки - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу поместить текст, состоящий из нескольких строк, как одно сообщение, в тему кафки.

После того, как я введу:

kafka-console-producer --broker-list localhost:9092 --topic myTopic

и скопируйте мой текст:

My Text consists of:
two lines instead of one

Я получаю два сообщения в теме кафки, но хочу иметь только одно. Есть идеи как этого добиться? Спасибо

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

С Console-consumer вы явно запускаете тесты для ожидаемых данных, поступающих от клиента Если это одно сообщение, лучше сохранить его как одну строку, добавив в качестве идентификатора уникальный разделитель. например,

{это первая строка ^^ это вторая строка}

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

0 голосов
/ 04 сентября 2018

Для этого вы можете использовать kafkacat с его оператором -D для указания пользовательского разделителя сообщений (в данном примере /):

kafkacat -b kafka:29092 \
        -t test_topic_01 \
        -D/ \
        -P <<EOF
this is a string message 
with a line break/this is 
another message with two 
line breaks!
EOF

Обратите внимание, что разделитель должен быть одним байтом - многобайтовые символы в конечном итоге будут включены в получающееся сообщение См. Проблему # 140

Результирующие сообщения, проверенные также с использованием kafkacat:

$ kafkacat -b kafka:29092 -C \
         -f '\nKey (%K bytes): %k\t\nValue (%S bytes): %s\n\Partition: %p\tOffset: %o\n--\n' \
         -t test_topic_01

Key (-1 bytes):
Value (43 bytes): this is a string message
with a line break
Partition: 0    Offset: 0
--

Key (-1 bytes):
Value (48 bytes): this is
another message with two
line breaks!

Partition: 0    Offset: 1
--
% Reached end of topic test_topic_01 [0] at offset 2

Проверка с использованием kafka-console-consumer:

$ kafka-console-consumer \
    --bootstrap-server kafka:29092 \
    --topic test_topic_01 \
    --from-beginning

this is a string message
with a line break
this is
another message with two
line breaks!

(, иллюстрирующая, почему с kafkacat приятнее работать, чем с kafka-console-consumer из-за его дополнительной детализации:) )

0 голосов
/ 04 сентября 2018

Это невозможно с kafka-console-producer, так как в нем используется объект Java Scanner с разделителем новой строки.

Вам нужно будет сделать это через собственный код производителя

...