web-dev-qa-db-ja.com

複数のKafka=コンシューマーがパーティションから同じメッセージを読み取ることができます

メッセージにあるアクションを実行するためにKafkaキューを読み取るKafka consumer(Java)を記述する予定です。

コンシューマーは独立して実行されるため、メッセージは一度に1つのコンシューマーのみによって処理されますか?それ以外の場合、すべてのコンシューマは、パーティションに独自のオフセットがあるため、同じメッセージを処理します。

理解してください。

23
shiv455

グループID に依存します。 12個のパーティションを持つトピックがあるとします。同じグループIDを持つ2 Kafkaコンシューマーがある場合、両方とも6パーティションを読み取ります。つまり、異なるパーティションセット=異なるメッセージセットを読み取ります。4Kafka同じグループIDを持つcosnumers。それぞれが3つの異なるパーティションなどを読み取ります。

ただし、異なるグループIDを設定すると、状況が変わります。異なるグループIDを持つ2つのKafkaコンシューマーがある場合、互いに干渉することなく12個のパーティションすべてを読み取ります。両方のコンシューマーは、まったく同じメッセージセットを個別に読み取ります。 Kafka異なるグループIDを持つコンシューマーは、すべてのパーティションなどをすべて読み取ります。

72

Kafkaは、サブスクライブされたトピックの各メッセージを各消費者グループの1つのプロセスに配信します。これは、各パーティションがグループ内のちょうど1つのコンシューマに割り当てられるように、コンシューマグループ内のすべてのメンバー間でパーティションのバランスをとることによって実現されます。概念的には、消費者グループは、たまたま複数のプロセスで構成されている単一の論理サブスクライバーであると考えることができます。

簡単に言えば、Kafkaメッセージ/レコードは、コンシューマグループごとに1つのコンシューマプロセスによってのみ処理されます。

1
Karan Khanna