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ミリ秒に設定されているため、オフセットはまだコミットされません。
このシナリオでは、コミットされたオフセットは、実際に処理された最新のオフセットよりさらに遅れていますか?
誰かが明確にする/確認できますか?
あなたは正しいです。最終的に2つのオフセット(コミットされ、最新の処理されたもの)が同期されますが、コミットされたオフセットは遅れていきます。 – Deeps
2つのコミットの間にはい。これは、カフカが処理しなければならないコミットの数を減らすためのものです。カフカは最低一回の配送保証を提供することを思い出してください。したがって、コミットの数と、失敗した場合に再処理する必要のあるデータの量との間のトレードオフです。 –
ポーリングコールが100ミリ秒後に、自動コミット間隔を10ミリ秒に設定した場合はどうなりますか? –