ホームページ >Java >&#&チュートリアル >Kafka Consumer - 消費者グループのオフセットをコミットします

Kafka Consumer - 消費者グループのオフセットをコミットします

DDD
DDDオリジナル
2025-01-26 20:11:10930ブラウズ

Kafka Consumer Group Offset を理解する: 包括的なガイド

このガイドでは、メッセージ消費の進行状況を追跡するために重要な、Kafka コンシューマー グループ オフセットについて説明します。 各コンシューマ グループは、消費する各パーティションのオフセットを維持し、最後に処理されたレコードを示します。 これにより、消費者は再起動後に正しい位置から再開できるようになります。

コンシューマ グループ オフセットとは何ですか?

コンシューマ グループ オフセットは、Kafka トピックのパーティション内のコンシューマの位置を追跡する単純な数値識別子です。 各パーティションには、レコードごとに連続したオフセットがあります。コンシューマ グループは、これらのオフセットを使用して、中断した場所を記憶します。たとえば、2 つのパーティション トピック (P1 と P2) から読み取るコンシューマー グループは、それぞれに個別のオフセットを持ち、それぞれ P1 と P2 で最後に読み取られたレコードを表します。

Kafka Consumer – Committing consumer group offset

コンシューマ グループ 1 の現在のオフセット (位置) の例

オフセット ストレージ: Kafka と外部システム

オフセット ストレージは、Kafka 自体内または外部システム (データベースまたはファイル) 内の 2 つの方法で処理できます。この記事では、Kafka の内部オフセット ストレージ メカニズムに焦点を当てます。

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

を使用する時期

Auto-commitは、アプリケーションの場合に適しています:

  • は、時折のデータ再処理(idempotent操作)を許容します
  • いくつかのメッセージの損失を処理できます。
  • それ以外の場合は、手動のコミットをお勧めします。

同期と非同期コミット

Manual Commitは、同期(

)および非同期(

)オプションを提供します。 commitSync()コミットが確認されるまでブロックし、持続性を確保しますが、パフォーマンスに影響を与えます。 commitAsync()はブロッキングではありませんが、潜在的な例外を処理する必要があります。commitSync() commitAsync()結論

消費者グループのオフセットは、信頼できるKafka消費の基本です。 自動コミットは物事を簡素化しますが、手動コミットはより大きな制御とデータの安全性を提供します。 同期と非同期のコミットを選択することは、アプリケーションのニーズ、パフォーマンスと信頼性のバランスをとることに依存します。 これらのメカニズムを理解することは、堅牢で障害のあるカフカアプリケーションを構築するための鍵です。

kafka

の詳細をご覧ください

コーディングハーバーで利用できる無料のカフカミニコースを探索することを検討してください。 写真クレジット:@kencheungphoto

以上がKafka Consumer - 消費者グループのオフセットをコミットしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。