Kafka控制台消费者获得分区

时间:2017-06-08 16:40:43

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

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

kafka-console-consumer.bat --bootstrap-server localhost:9092 --from-beginning --topic events

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

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

更新:

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

3 个答案:

答案 0 :(得分:6)

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

例如,以下命令将为每条消息打印主题,分区,偏移量和消息有效负载/值:

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

答案 1 :(得分:2)

对于kafka 9,没有任何开箱即用的信息可以打印出来。

根据代码,消息格式化器只获取键和值。

try {
    formatter.writeTo(msg.key, msg.value, System.out)
}

--property print.key=true允许打印消息密钥。

在kafka 10中,还有一个有用的参数print.timestamp

答案 2 :(得分:1)

kafka-console-consumer.sh提供了一种真正的奥秘机制,可以通过--property标志传递其他选项/标志。但是,不幸的是,打印分区号不是这些属性之一。

您可能要考虑其他命令行替代方法,例如Kafkacat

或者,如果您希望使用基于Web的客户端,请尝试Kafdrop 3

作为最后的选择,您可以编写一个简单的Java / Groovy命令行实用程序,将其附加到主题/分区并以所需的格式转储消息。