2016-07-06 12 views
10

https://www.safaribooksonline.com/library/view/kafka-the-definitive/9781491936153/ch04.htmlのドキュメントには、と記載されています。自動コミットを有効にすると、pollの呼び出しは常に前のポーリングによって返された最後のオフセットをコミットします。ポーリングによって返されたすべてのイベントを常に処理してからpollを再度呼び出す前に(またはclose()を呼び出す前に、自動的にオフセットをコミットすることが重要です) "。その場合、auto.commit.interval.msが以前のpoll()から受信したメッセージを処理する時間よりも大きい場合、どのように動作しますか? =真Kafkaの自動コミットとauto.commit.interval.msについての明確化が必要

auto.commit.interval.ms = 10

そして、私が呼ん投票

enable.auto.commit:

は、私は以下のいる場所、それはより具体的にするシナリオを検討します()をループで使用します。 (ポーリングの最初の呼び出し時に

1))、私は1000件のメッセージを取得(2000-3000オフセット)し、それは私が再び)(ポーリングを呼び出す)すべての1000のメッセージ

2を処理するために、1ミリ秒かかります。この2回目のpoll()コールでは、以前のpoll()から返された最新のオフセット3000をコミットする必要がありますが、auto.commit.interval.msは10ミリ秒に設定されているため、オフセットはまだコミットされません。

このシナリオでは、コミットされたオフセットは、実際に処理された最新のオフセットよりさらに遅れていますか?

誰かが明確にする/確認できますか?

答えて

9

正しく動作を記述します。しかし、結論は正しくありません。コミットされたオフセットはそれ以上の遅れをとることはありません。自動コミット間隔が経過すると、次回のpoll呼び出しではすべての処理メッセージがコミットされます。

たとえば、10ミリ秒ごとにポーリングを呼び出し、コミット間隔を100ミリ秒に設定します。したがって、10回目のpoll呼び出しごとにコミットが行われます(このコミットは最後の10回のpoll呼び出しのすべてのメッセージをカバーします)。

+0

あなたは正しいです。最終的に2つのオフセット(コミットされ、最新の処理されたもの)が同期されますが、コミットされたオフセットは遅れていきます。 – Deeps

+0

2つのコミットの間にはい。これは、カフカが処理しなければならないコミットの数を減らすためのものです。カフカは最低一回の配送保証を提供することを思い出してください。したがって、コミットの数と、失敗した場合に再処理する必要のあるデータの量との間のトレードオフです。 –

+0

ポーリングコールが100ミリ秒後に、自動コミット間隔を10ミリ秒に設定した場合はどうなりますか? –

関連する問題