web-dev-qa-db-ja.com

Kafka-ハイレベルコンシューマを使用してすべてのメッセージの後にオフセットをコミットする方法は?

私はKafkaの高レベルのコンシューマーを使用しています。私はKafka=をアプリケーションの「トランザクションのキュー」として使用しているので、メッセージを見逃したり再読したりしないように絶対に確認する必要があります。これに関して2つの質問があります。 :

  1. Zookeeperにオフセットをコミットするにはどうすればよいですか?すべてのメッセージが正常に消費された後、自動コミットとコミットオフセットをオフにします。高レベルのコンシューマを使用してこれを行う方法の実際のコード例を見つけることができないようです。誰もこれで私を助けることができますか?

  2. 一方、zookeeperへのコミットが遅いと聞いたので、オフセットをローカルで追跡する別の方法があるかもしれません。この代替方法はお勧めですか?はいの場合、どのようにアプローチしますか?

24
Hongyi Li

http://kafka.Apache.org/documentation.html#consumerconfigs から2つの関連する設定があります。

auto.commit.enable

そして

auto.commit.interval.ms

消費者が各メッセージの後にオフセットをコミットするように設定する場合、唯一の設定は各メッセージの後ではなく、タイマー間隔の後にあるため、それは困難です。着信メッセージのレート予測を行い、それに応じて時間を設定する必要があります。

一般に、この間隔を短くしすぎると、zookeeperの読み取り/書き込みレートが大幅に増加し、zookeeperはクォーラム全体で一貫性があるため速度が低下するため、お勧めできません。

22
laughing_man

最初に自動コミットを無効にすることができます:_auto.commit.enable=false_

次に、メッセージの取得後にコミットします:consumer.commitOffsets(true)

25
Yueheng Li