Kafka Consumer получает пару ключевых ценностей

Я сейчас работаю с Kafka и Flink, у меня есть kafka, работающий на моем локальном ПК, и я создал тему, которая потребляется.

Desktop\kafka\bin\windows> kafka-console-consumer.bat --zookeeper localhost: 2181 -topic test

но он просто извлекает сообщение, enter image description here

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

Ответы

Ответ 1

Используя встроенный консольный потребитель (я использую Kafka 0.9.0.1), вы можете распечатать только ключ и значение сообщений, используя разные форматы. Чтобы напечатать ключ, установите свойство print.key=true.

Есть еще одно свойство key.separator которое по умолчанию равно "\ t" (вкладка), которое вы также можете изменить на что угодно.

Чтобы установить эти свойства, вы можете создать файл конфигурации и использовать --consumer.config <config file> или передать свойства, используя --property key=value.

Вы также можете реализовать свой собственный форматтер и использовать его с --formatter но у вас останутся только ключ и значение, потому что это то, что обеспечивает черта MessageFormatter (см. WriteTo ниже).

trait MessageFormatter {
    def writeTo(key: Array[Byte], value: Array[Byte], output: PrintStream)

    def init(props: Properties) {}

    def close() {}
}

Например:

./bin/kafka-console-consumer.sh --new-consumer --bootstrap-server kafka-1:9092 --topic topic1 --property print.key=true --property key.separator="-" --from-beginning
key-p1
key-p2
key-p3
null-4
null-8
null-0

Ответ 2

Используйте команду ниже:

kafka-console-consumer --bootstrap-server localhost:9092 --topic topic_name \ 
      --from-beginning --formatter kafka.tools.DefaultMessageFormatter \
      --property print.key=true --property print.value=true \
      --property key.deserialzer=org.apache.kafka.common.serialization.StringD \
      --property value-deserializer=org.apache.kafka.common.serialization.LongDeserializer