2017-01-04 7 views
0

私は2つのカフカクラスタをAとB、BはAのレプリカを持っています。私はクラスタBからのメッセージを消費したいと思います。それにもかかわらず、両方のクラスタからメッセージを消費すると、メッセージが重複します。だから、私のカフカコンシューマーが1つのクラスターからのメッセージを受信するように設定する方法はありますか?カフカの2つの異なるクラスターから消費する方法は?

答えて

0

Thanks--

だから私は1つのクラスタのみからメッセージを受信するために私のカフカの消費者を設定することができますどのような方法があります。

はい:カフカのコンシューマインスタンスは、常に1つのカフカクラスタからのメッセージのみを受信します。つまり、同じコンシューマインスタンスを2つ以上のクラスタから読み取るための組み込みオプションはありません。しかし、私はあなたが別の何かを探していると思う、以下を参照してください。

クラスタBからのメッセージは、Aがダウンして、viceversaである場合にのみ消費したいと考えています。それにもかかわらず、両方のクラスタからメッセージを消費すると、メッセージが重複します。

KafkaのコンシューマAPIで「クラスタAに障害が発生した場合はクラスタBに切り替える」などの組み込みフェールオーバーサポートはありません。このような動作が必要な場合は、カフカコンシューマAPIを使用するアプリケーションで行う必要があります。

たとえば、クラスタAから読み込み、そのインスタンスおよび/またはそのクラスタを監視して、クラスタBへのフェールオーバーが必要かどうかを判断し、必要に応じて別のフェールオーバーを実行してBへのフェールオーバーを実行するコンシューマインスタンスを作成できますAが失敗した場合にBから読み取るためのコンシューマ・インスタンス。

しかし、このフェールオーバーの動作は私の単純化された例よりも複雑になります。 1つの難点は、クラスタAからのどのメッセージがBへの切り替え時に既に読み込まれているかを知ることである:メッセージのオフセットがクラスタ間で異なり、メッセージ(Bにおける)のコピーが既に読み込まれているかどうかを判断する(Aから)は自明ではない。

注:場合によっては、このようなアプリケーション/このようなフェールオーバーロジックを簡略化することができます。メッセージ処理は冪等である(すなわち、重複メッセージ/メッセージの重複処理が処理結果を変更しない場合)。

+0

フェールオーバーの時間中にメッセージオフセットを処理するにはどうすればいいですか? 注: - メッセージ処理は冪等ではありません。 – Teja

+0

Jun Rao(カフカコミッターとコンフルエントの共同設立者)が開始点としてhttp://www.slideshare.net/HadoopSummit/building-largescale-stream-infrastructures-across-multiple-datacenters-with-apache-kafka KIP-33(スライド32)はKafkaで実装されていることに注意してください。 –

関連する問題