web-dev-qa-db-ja.com

kafka=コンシューマコンソールスクリプトから最後のメッセージを取得する

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"

13
Paul Leclercq

私は自動化を認識していませんが、この単純な2段階のアプローチを使用すれば、うまくいくはずです。私の場合、それはパーティション化されたトピックでしたが、パーティション化されていないトピックがある場合は、そのパラメータを省略することができます。

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)が表示されます。

25
Aydin K.

私はおそらくいくつかのグーグルから正しい答えを得ました http://grokbase.com/t/kafka/users/145x930s27/how-to-get-last-message

そこで、getOffsetBefore apiを使用して最後のオフセットを見つけ、そのオフセット-1を使用してフェッチすることを提案する人がいます。

2

私は次のコマンドラインで動作すると思います(つまり--from-beginningなし):

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test
2
Jérôme B