从kafka使用者控制台脚本获取最后一条消息

时间:2015-10-16 12:46:59

标签: apache-kafka kafka-consumer-api

我们可以通过以下方式获取来自Kafka的所有消息:

 bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

有没有办法让只显示最后一条消息

编辑:

如果您只想监视流中的一些消息(--max-messages 10),则可以使用以下方便的命令:

watch -n5 "./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic auction --max-messages 10"

4 个答案:

答案 0 :(得分:17)

我不知道任何自动化,但使用这个简单的两步法,它应该工作。 请注意,在我的情况下,这是一个分区主题,如果你有一个未分区的主题,你可以保留它的参数:

1)获取主题的最大偏移量(+他们的分区):

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic mytopic

mytopic:2:11
mytopic:1:7
mytopic:0:15
mytopic:3:8

2)选择一个主题(+分区)并提供 offset - n 作为参数:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mytopic --offset 10 --partition 0  

主题的最后n条消息将打印到控制台。 在我的例子中,它将显示5条消息(= 15-10)。

答案 1 :(得分:2)

我可能从谷歌搜索http://grokbase.com/t/kafka/users/145x930s27/how-to-get-last-message

得到了正确答案

有人建议使用getOffsetBefore api然后找到最后一个偏移量 使用该偏移量 - 1来获取。

答案 2 :(得分:1)

我认为使用以下命令行它将起作用(即没有--from-beginning):

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test

答案 3 :(得分:0)

使用 KafkaCat (https://docs.confluent.io/platform/current/app-development/kafkacat-usage.html) 可以读取 Apache Kafka Topic 的最后 N 条消息。