web-dev-qa-db-ja.com

カフカでは消費者リバランスはどのように機能しますか?

新しいコンシューマー/ブローカーが追加またはダウンすると、Kafkaがリバランス操作をトリガーします。 Is Kafkaブロッキング操作の再調整。 Kafkaコンシューマは、リバランス操作の進行中にブロックされていますか?

32
java_geek

「ブロックされている」という意味によって異なります。 「リバランスがトリガーされたときに既存の接続が閉じている」という意味の場合、答えは「はい」です。現在のカフカのリバランスアルゴリズムは残念ながら不完全です。

これは、消費者のリバランス中に起こっていることです。

10個のパーティション(0-9)と1つのコンシューマー(consumer1)消費しています。 2人目の消費者が現れたとき(consumer2)両方のリバランスタスクトリガー(consumer1はイベントを取得します、consumer2は、初期リバランスを行います)。今consumer1は、既存の接続をすべて閉じ(間もなく再開されるものも含む)、10個のパーティションすべてについて、Zookeeperのパーティション所有権を解放します。

次に、パーティション割り当てアルゴリズムを実行し、要求するパーティションを決定し、Zookeeperでパーティションの所有権を再度要求します。申し立てが成功した場合consumer1は彼の新しいパーティションのフェッチを開始します。

その間consumer2は、パーティション割り当てアルゴリズムも実行し、Zookeeperでもパーティションを要求しようとします。クレームは、consumer1これらのパーティションの所有権を解放します。申し立てが成功した場合consumer2はフェッチを開始します。または、所定の再試行回数内にパーティションを要求できなかった場合は、rebalance failed after n retries例外。

お気づきのとおり、接続を閉じてパーティションの所有権を解放するのではなく、consumer1はもう所有していません。すべての接続を不必要に閉じ、より少ないパーティションで再起動します。パーティションを追加した同じストーリー(ワイルドカードフィルターを使用して新しいトピックが表示された場合)-新しい接続を開くだけでなく、すべての接続を閉じてから再び開きます。

だから、これがあなたの質問に答えることを願っています-リバランスが始まるとフェッチが停止します。

43
serejja