2017-08-28 12 views
0

異なるグループのコンシューマは、同じトピックからパーティションxを読み込み、別のトピックとパーティションyに書き込むことができますか?kafkaのコンシューマが同じパーティションに読み書きする

私は、ある消費者が他の消費者が処理するデータを破棄する消費者戦略を実装します。 データがプロデューサによって共有パーティションに保存される順序は重要ではありません。

私はちょうどこれが可能

+2

消費者は読み取りのみを行い、書き込みはしません。しかし、あなたは確かに2人の消費者に同じ話題を読んでもらい、その結果を別の共通の話題に書き込むプロデューサーに渡すことができます。彼らはそれぞれ各入力レコードを読み込みます(すべてが消費者グループごとに2回ずつ読み込まれますが、スキップする量にもよるが、カスタムロジックを実装して他のものだけを見なければならないものは無視する)そうすることで、2つの独立した入力トピックまたは両方のことを行う単一の消費者グループがより良い方法になる可能性があります)。 – Thilo

+0

はい申し訳ありませんが、私はプロデューサーがトピックを書くことを意味していました。助けのためのthx – user817795

+0

1つの消費者が第2のものからの入力を無視したい場合、なぜ同じグループを使用しないのですか?これにより、同期を処理することに煩わされることはありません。 入力データが1つのパーティションにあり(変更できない場合)、kafkaストリーム(または単純なクライアント)を使用して、トピック/パーティションのデータを新しいトピック/ 2に広げるだけです*パーティション、ラウンドロビン方式。その後、効果的に2人の消費者を置くことができます。 – Treziac

答えて

1

ある場合は、ここでは2つの異なるアプローチ持つことができるかを知りたい:

  • 消費者は異なる消費者団体であるが。両方ともすべてのメッセージを受信することを意味し、消費者のメッセージを無視するビジネスロジックに従います。
  • コンシューマは同じコンシューマグループに属し、異なるパーティションを受け取ります。消費者に配信されるメッセージは、他者には配信されません。カフカ機能を利用していますが、デフォルトのラウンドロビン方式を使用する場合やメッセージごとのキーやカスタムパーティショナーを使用する場合は、データをどのように分割するかによって異なります。

私が第2の解決策で見る唯一の懸念は、再バランスです。消費者がオフラインになって戻ってくると、再調整が行われ、パーティションが別の方法で配布される可能性があります。私。パーティションP1とP2からコンシューマC1の読み取りを開始し、パーティションP3とP4からC2の読み取りを開始します。 C2がオフラインになったとします。まず、オフラインの場合、C1はすべてのパーティションを取得します(シナリオに適しているかどうかはわかりませんが)。C2がオンラインに戻ると、再分配が行われ、割り当てられたパーティションが異なる可能性があります。 C2(C1ではなく)に、P3とP4はC1(C2ではなく)になります。この種のコンシューマがパーティションでスワップするかどうかは、アプリケーションロジックの問題です。

関連する問題