Kafka控制台消费者获得分区

Mee*_*ack 4 java apache-kafka kafka-consumer-api

我正在使用Kafka控制台使用者来使用包含多个分区的主题消息:

kafka-console-consumer.bat --bootstrap-server localhost:9092 --from-beginning --topic events
Run Code Online (Sandbox Code Playgroud)

但它只打印邮件正文.有没有办法打印记录元数据或分区号?因为我想知道消息来自哪里.

我已经探讨了控制台消费者文档http://documentation.kamanja.org/_static/command-ref/kafka-console-consumer.pdf,但未找到任何相关属性.

更新:

因此,我认为唯一的解决方案是覆盖DefaultMessageFormatter.class(我们可以通过使用--formatter属性运行kafka console consumer来设置它)并添加在#writeTo(..)方法中打印记录元数据的自定义逻辑.

小智 10

我发现我能够成功订阅主题并使用此 --properties 标志输出密钥和分区,如下所示:

kafka-console-consumer \
  --topic <some-topic> \
  --bootstrap-server :9092 \
  --from-beginning \
  --property print.key=true \
  --property print.partition=true   
Run Code Online (Sandbox Code Playgroud)

它给了我这样的输出:

Partition:0 "3" {"id": 2}
Run Code Online (Sandbox Code Playgroud)


Han*_*sen 6

考虑使用更强大的Kafka命令行使用者,如kafkacat https://github.com/edenhill/kafkacat/blob/master/README.md

例如,以下命令将打印消耗的每条消息的主题,分区,偏移量和消息有效内容/值:

kafkacat -b <broker> -C -t <topic> -f '%t %p @ %o: %s\n'