web-dev-qa-db-ja.com

Apache Kafka=コンテキストでは「リバランス」とはどういう意味ですか?

私はKafkaの新しいユーザーであり、現在2〜3週間試用しています。現時点ではKafka =ほとんどの部分で機能しますが、APIを自分のAPIに適合させようとした後Kafkaコンシューマー(これはわかりにくいですが、利用できるはずの新しいKafkaConsumerのガイドラインに従っています。 v 0.9、「トランク」リポジトリにあります)同じgroupIDを持つ複数のコンシューマーがある場合、トピックからのレイテンシーの問題が発生しました。

このセットアップでは、コンソールは一貫して「リバランストリガー」に関する問題を記録します。新しいコンシューマーをコンシューマーグループに追加するとリバランスが発生しますか?同じgroupIDのどのコンシューマーインスタンスがどのパーティションを取得するか、またはリバランスが他の何かに完全に使用されているかを把握するためにトリガーされますか?

https://cwiki.Apache.org/confluence/display/KAFKA/Kafka+0.9+Consumer+Rewrite+Design からもこの文章に出くわしましたが、理解できないようです。だから誰かが私がそれを理解するのを手伝うことができれば、それは大歓迎です:

リバランスは、(同じグループに属する)コンシューマーインスタンスのグループが、そのグループがサブスクライブしているトピックのパーティションの相互排他的なセットを調整するプロセスです。コンシューマーグループの正常なリバランス操作が終了すると、サブスクライブされたすべてのトピックのすべてのパーティションは、グループ内の単一のコンシューマーインスタンスによって所有されます。リバランスの仕組みは次のとおりです。すべてのブローカーは、消費者グループのサブセットのコーディネーターとして選出されます。グループのコーディネーターブローカーは、サブスクライブされたトピックのコンシューマーグループメンバーシップの変更またはパーティションの変更に関するリバランス操作を調整する責任があります。また、結果のパーティション所有権構成を、リバランス操作を実行しているグループのすべてのコンシューマーに伝達する役割も果たします。

38
Jeff Gong

新しいコンシューマがコンシューマグループに参加すると、コンシューマのセットは負荷を「再分散」して、各コンシューマにパーティションを割り当てようとします。この割り当てが行われている間にコンシューマーのセットが変更されると、リバランスは失敗して再試行されます。この設定は、あきらめるまでの最大試行回数を制御します。

このコマンドはrebalance.max.retriesで、デフォルトで4に設定されています。

また、次の条件に該当する場合に発生する可能性があります。

ZooKeeperセッションのタイムアウト。この期間に消費者がZooKeeperへのハートビートに失敗すると、消費者は死んでいると見なされ、リバランスが発生します。

お役に立てれば!

43
George Davis

コンシューマグループ内のすべてのコンシューマには、1つ以上のトピックパーティションが排他的に割り当てられます。Rebalanceは、コンシューマ間のパーティション所有権の再割り当てです。

A リバランスは次の場合に発生します:

  • 消費者はグループに参加します
  • 消費者はきれいにシャットダウンします
  • 消費者は、グループコーディネーターによってDEADと見なされます。これは、クラッシュ後、または消費者が長時間実行される処理でビジーの場合に発生する可能性があります。つまり、設定されたセッション間隔内に消費者からグループコーディネーターにハートビートが送信されなかったことを意味します。
  • 新しいパーティションが追加されます


コンシューマグループに指定されたグループコーディネーター(クラスター内のブローカーの1つ)およびグループリーダー(グループに参加する最初のコンシューマ) 、リバランスは、次のように多少説明できます。

  • リーダーは、グループ内のすべてのコンシューマーのリストをグループコーディネーターから受信します(これには、最近ハートビートを送信したために生きていると見なされるすべてのコンシューマーが含まれます)。パーティションのサブセットを各消費者。
  • パーティションの割り当てを決定した後(Kafkaには組み込みのパーティション割り当てポリシーがいくつかあります)、グループリーダーは割り当てのリストをグループコーディネーターに送信します。すべての消費者に。


これはKafka 0.9に適用されますが、新しいバージョンがまだ有効であると確信しています。

27
vortex.alex