私たちは、スプリングカフカを使用してメッセージを消費しています。メッセージを受け取るために各パーティションの受信機を作成しました。今では、単一のパーティションからコンシューマメッセージに複数のレシーバが必要な要件があります。Spring Kafkaパーティション用の複数のコンシューマ
パーティション0があるとします。現在、このパーティションからメッセージを受信するレシーバ(Receiver 1)は1つだけです。 これで、同じパーティション(パーティション0)にもう1つのReceiver(Receiver 2)を追加します。
したがって、Producerが100個のメッセージをこのパーティションに送信する場合は、Receiver 1で50個のメッセージを受信し、残りの50個のメッセージをReceiver 2で受信する必要があります。両方のレシーバクラスが同じグループに属しています(私はprops.put( "group.id"、 "unique_group_id")を設定しました)
このシナリオが妥当であるかどうか理解してください。
しかし、私たちはすでにテクノロジースタックを完成させました。だからカフカをキューに置き換えることはできない。私たちはkafkaブローカーで、コンシューマーグループに関係なくプロデューサーがメッセージのコピーを1つだけ送信するように指定することができます。 – user3811946
Kafkaは、競合するコンシューマをパーティションでサポートしていません。コンシューマの並行性は、パーティションの数によって制限されます。並行性を高めるには、パーティションの数を増やすだけです。 '>最終的な技術スタック' - それは奇妙に聞こえる - それを最初に理解することなく、どのように技術を選択することができますか? –
@ user3811946このような設定はありません。 Gary Russell氏は、並行性を高めるためにパーティション数を増やす必要があると述べています。別の解決策は、各消費者に対して、パーティションのデータを「ワーカー・キュー」に送り、次にこれらのメッセージを処理する複数のワーカーを持つことです。しかしながら、この解決策はより複雑である。たぶんあなたのデザインを再考する必要があります。 –