Kafka Consumer获得关键值对

时间:2016-12-30 17:30:47

标签: apache-kafka kafka-consumer-api

我目前正在与Kafka和Flink合作,我在我的本地PC上运行了kafka,并创建了一个正在使用的主题。

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

但它只是检索邮件enter image description here

有没有办法获得有关消息的更多详细信息?让我们说时间?键?我检查了kafka文档但我没有找到关于这个主题的内容

2 个答案:

答案 0 :(得分:43)

使用开箱即用的控制台消费者(我使用的是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

答案 1 :(得分:0)

使用以下命令

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 ty value-deserializer = org.apache.kafka.common.serialization.LongDeserializer