web-dev-qa-db-ja.com

kafka消費者が最後に消費されたオフセットから読み取るが、最初からは読み取らないようにする方法

私はkafkaに不慣れで、最後に消費されたオフセットからメッセージを読み取る方法があるかどうかを理解しようとしていますが、最初からではありません。

私は、私の意図が逸脱しないように、事例を書いています。

Eg:
1) I produced 5 messages at 7:00 PM and console consumer consumed those.
2) I stopped consumer at 7:10 PM
3) I produced 10 message at 7:20 PM. No consumer had read those messages.
4) Now, i have started console consumer at 7:30 PM, without from-beginning.
5) Now, it Will read the messages produced after it has started. Not the earlier ones, which were produced at 7.20 PM

最後に消費されたオフセットから生成されたメッセージを取得する方法はありますか?

12
Srini

kafkaを初めて使用し、最初からではなく最後に消費されたオフセットからメッセージを読み取る方法があるかどうかを理解しようとしています

はい、コンソールコンシューマを使用して、最後に消費されたオフセットから読み取ることができます。 kafka-console-consumerを呼び出すときにconsumer.configフラグを追加する必要があります。

例:-

[root@sandbox bin]# ./kafka-console-consumer.sh --topic test1 --zookeeper localhost:2181 --consumer.config /home/mrnakumar/consumer.properties

ここで/ home/mrnakumar/consumer.propertiesgroup.idを含むファイルです。 /home/mrnakumar/consumer.propertiesは次のようになります。

group.id = consoleGroup

Consumer.configを使用すると、最初から[--from-beginning]を使用して読み取るか、ログの最後からのみ読み取ることができます。ログの終わりとは、コンシューマーの開始後に公開されたすべてのメッセージを意味します。

9
mrnakumar

コンシューマ設定で_auto.offset.reset=earliest_および固定_group.id=something_を設定すると、最後にコミットされたオフセットでコンシューマが開始されます。あなたの場合、7:20に最初のメッセージで消費を開始する必要があります。開始後に投稿されたメッセージの読み取りを開始する場合、_auto.offset.reset=latest_は7:20に送信された10個のメッセージを無視し、開始後に受信したメッセージを読み取ります。

最初から開始したい場合は、最初のconsumer.poll()の後にseekToBeginningを呼び出すか、コンシューマグループIDを一意のものに変更する必要があります。

3
George Smith

largestのコンシューマー構成のauto.offset.resetパラメーターを設定して、最後にコミットされたオフセットの後にすべてのメッセージを読み取るようにする必要があります。

3
codejitsu