私は読んでいます これ :
自動コミットオフセットをコミットする最も簡単な方法は、コンシューマがオフセットをコミットできるようにすることです。 enable.auto.commit = trueを構成すると、5秒ごとに、コンシューマーはクライアントがpoll()から受け取った最大オフセットをコミットします。 5秒間隔がデフォルトであり、auto.commit.interval.msを設定することによって制御されます。コンシューマーの他のすべてと同様に、自動コミットはポーリングループによって駆動されます。ポーリングするたびに、コンシューマーはコミットするタイミングかどうかを確認し、コミットする場合は、前回のポーリングで返されたオフセットをコミットします。
たぶん私の英語が下手だという問題がありますが、私はこの説明を完全に理解していません。
デフォルトの間隔である5秒の自動コミットを使用し、ポーリングが7秒ごとに発生するとします。この場合、コミットは5秒ごとまたは7秒ごとに発生しますか?
ポーリングが3秒ごとに発生する場合の動作を明確にできますか?コミットは5秒ごとまたは6秒ごとに行われますか?
読みました これ :
自動コミット:auto.commitをtrueに設定し、auto.commit.interval.msプロパティにミリ秒単位の値を設定できます。これを有効にすると、Kafkaコンシューマは、poll()呼び出しへの応答として受信された最後のメッセージのオフセットをコミットします。poll()呼び出しは、セットのバックグラウンドで発行されますauto.commit.interval.ms。
そして、それは答えと矛盾します。
このことについて詳しく説明していただけますか。
私がこのようなダイアグラムを持っているとしましょう:
0秒-投票
4秒-投票
8秒-投票
オフセットはいつコミットされ、いつオフセットされますか?
自動コミットチェックはすべてのポーリングで呼び出され、経過時間が設定された時間より長いことをチェックします。その場合、オフセットはコミットされます。
コミット間隔が5秒で、ポーリングが7秒後に発生する場合、コミットは7秒後にのみ発生します。
ポーリングの完了後、できるだけ早く自動コミットしようとします。自動コミットが有効になっているかどうか、間隔はどのくらいか、自動コミットを実行する次の期限は何かを理解するために、クラスレベルで定義されたローカルフィールドのセットを持つコンシューマコーディネータのソースコードを確認できます。
そして、投票を実行してストレージを実行する場所の1つ https://github.com/Apache/kafka/blob/10cd98cc894b88c5d1e24fc54c66361ad9914df2/clients/src/main/Java/org/Apache/kafka/clients/ consumer/internals/ConsumerCoordinator.Java#L279
たとえば、7秒ごとにポーリングが実行され、自動コミットが5に設定されているとします。
0-投票、+期限を5秒に設定
7-投票+期限によるコミット、期限を7 + 5 = 12に更新
14-投票+期限によるコミット、期限を12 + 5 = 17に更新
ただし、ポーリングが3秒ごとに設定され、自動コミットが5に設定されている場合:
0-投票、+期限を5秒に設定
3-投票、コミットなし
6-投票+期限によるコミット、期限を6 + 5 = 11に更新