2017-01-31 14 views
0

私は2つのKAFKAクラスターを持っており、私は鏡メーカーを使ってトピックをあるクラスターから別のクラスターにミラーリングしていると言います。私は、カフカクラスター内の__consumer-offsetトピックへのオフセットをコミットするために、コンシューマーに組み込みプロデューサーがいることを理解しています。プライマリカフカクラスターがダウンした場合にどうなるかを知る必要がありますか? __consumer-offsetトピックも同期していますか?セカンダリクラスタにはブローカやその他の設定が異なる可能性があるため、いいえとは思えません。カフカのミラーリングされたクラスタで顧客オフセットをどのように維持していますか?

kafkaミラークラスタが消費者オフセットをどのように処理するか教えてください。

ここでauto.offset.resetの設定が重要ですか?

答えて

1

ミラーメーカーはオフセットを複製しません。

さらに、auto.offset.resetは、コンシューマの設定であるため、コンシューマの設定では、コンシューマがどこに読み込みを開始するか、起動時には有効なコミットされたオフセットが見つからないためです。

オフセットをミラーリングしない理由は、基本的に、ミラークラスタでは意味がありません。両方のクラスタでメッセージのオフセットが同じになることは保証されていないためです。

このように、フェイルオーバーの場合は、自分で「スマート」なものを見つけ出す必要があります。 1つの方法は、最後に処理されたレコードのメタデータタイムスタンプを覚えておくことです。これにより、ミラークラスタのタイムスタンプに基づいて「シーク」して、そこにおおよそのオフセットを見つけることができます。 (これにはカフカ0.10が必要です。)

+0

お返事ありがとうございます。 コミットされたオフセットを持つプライマリクラスタが停止するとどうなりますか? Kafkaのドキュメントに「消費者は各リクエストでオフセットを指定しています」と述べています。 消費者はすべてのカフカをミラーリングするか、またはカフカクラスタをミラーリングして、オフセットを新しい適切なオフセットに再マッピングしますか?私は理にかなったと思う。 – moodylearner

+0

わかりません。新しいブローカーホスト/ポートを設定する必要があるか、または他のクラスターへのフェールオーバーをどのように処理する必要があるかのように、コンシューマーを再起動する必要があると想定し、この再始動によってオフセットが削除されます。したがって、回避策として、定期的に、アプリケーションのコンシューマから最新のコミット済みオフセットを取得し、新しいクラスタへのフェールオーバー後に新しいコンシューマを初期化するときにseek()で使用することができます。ただし、フェールオーバー中に消費者が死亡した場合、オフセットは完全に失われてしまいますので、これを完全にフォールトトレラントにする必要はありません。 –

+0

@moodylearner私は自分の答えを更新しました。 –

関連する問題