ホームページ >Java >&#&チュートリアル >Kafka Consumer - 消費者グループのオフセットをコミットします
このガイドでは、メッセージ消費の進行状況を追跡するために重要な、Kafka コンシューマー グループ オフセットについて説明します。 各コンシューマ グループは、消費する各パーティションのオフセットを維持し、最後に処理されたレコードを示します。 これにより、消費者は再起動後に正しい位置から再開できるようになります。
コンシューマ グループ オフセットは、Kafka トピックのパーティション内のコンシューマの位置を追跡する単純な数値識別子です。 各パーティションには、レコードごとに連続したオフセットがあります。コンシューマ グループは、これらのオフセットを使用して、中断した場所を記憶します。たとえば、2 つのパーティション トピック (P1 と P2) から読み取るコンシューマー グループは、それぞれに個別のオフセットを持ち、それぞれ P1 と P2 で最後に読み取られたレコードを表します。
オフセット ストレージは、Kafka 自体内または外部システム (データベースまたはファイル) 内の 2 つの方法で処理できます。この記事では、Kafka の内部オフセット ストレージ メカニズムに焦点を当てます。
Kafka は、__consumer_offsets
という名前の特別な内部トピックにオフセットを保存します。 Kafka クライアント ライブラリはオフセットの保存と取得を処理し、コンシューマーが再起動後に最後に確認された位置からシームレスに再開できるようにします。
コンシューマのオフセットが見つからない場合、auto.offset.reset
設定によってコンシューマの動作が決定されます。
latest
(デフォルト): コンシューマは既存のメッセージを無視して、トピックの終わりから開始します。earliest
: コンシューマはトピックの先頭から開始し、利用可能なすべてのメッセージを処理します。none
: オフセットが見つからない場合は例外がスローされます。自動コミットは、定期的にオフセットを Kafka にコミットすることでオフセット管理を簡素化します。これはデフォルトで 5 秒ごとに自動的に行われます (enable.auto.commit
によって制御されます)。 便利ですが、データ損失の危険があります。
自動コミットは別のスレッドで動作するため、実行中のレコード処理を追跡しません。 コンシューマが複数のレコードをポーリングし、処理が完了する前に自動コミットすると、失敗時にデータ損失が発生する可能性があります。
手動コミットでは正確な制御が可能です。自動コミット (enable.auto.commit=false
) を無効にすると、レコードが正常に処理された後に commitSync()
または commitAsync()
を使用してオフセットを明示的にコミットします。これにより、データ損失が防止されます。
<code class="language-java">while (true) { records = consumer.poll(timeout); // process records consumer.commitSync(); // or consumer.commitAsync() }</code>
Auto-commitは、アプリケーションの場合に適しています:
同期と非同期コミット
)オプションを提供します。 commitSync()
コミットが確認されるまでブロックし、持続性を確保しますが、パフォーマンスに影響を与えます。 commitAsync()
はブロッキングではありませんが、潜在的な例外を処理する必要があります。commitSync()
commitAsync()
結論
の詳細をご覧ください
コーディングハーバーで利用できる無料のカフカミニコースを探索することを検討してください。 写真クレジット:@kencheungphoto以上がKafka Consumer - 消費者グループのオフセットをコミットしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。