新しいコンシューマー/ブローカーが追加またはダウンすると、Kafkaがリバランス操作をトリガーします。 Is Kafkaブロッキング操作の再調整。 Kafkaコンシューマは、リバランス操作の進行中にブロックされていますか?
「ブロックされている」という意味によって異なります。 「リバランスがトリガーされたときに既存の接続が閉じている」という意味の場合、答えは「はい」です。現在のカフカのリバランスアルゴリズムは残念ながら不完全です。
これは、消費者のリバランス中に起こっていることです。
10個のパーティション(0-9)と1つのコンシューマー(consumer1
)消費しています。 2人目の消費者が現れたとき(consumer2
)両方のリバランスタスクトリガー(consumer1
はイベントを取得します、consumer2
は、初期リバランスを行います)。今consumer1
は、既存の接続をすべて閉じ(間もなく再開されるものも含む)、10個のパーティションすべてについて、Zookeeperのパーティション所有権を解放します。
次に、パーティション割り当てアルゴリズムを実行し、要求するパーティションを決定し、Zookeeperでパーティションの所有権を再度要求します。申し立てが成功した場合consumer1
は彼の新しいパーティションのフェッチを開始します。
その間consumer2
は、パーティション割り当てアルゴリズムも実行し、Zookeeperでもパーティションを要求しようとします。クレームは、consumer1
これらのパーティションの所有権を解放します。申し立てが成功した場合consumer2
はフェッチを開始します。または、所定の再試行回数内にパーティションを要求できなかった場合は、rebalance failed after n retries
例外。
お気づきのとおり、接続を閉じてパーティションの所有権を解放するのではなく、consumer1
はもう所有していません。すべての接続を不必要に閉じ、より少ないパーティションで再起動します。パーティションを追加した同じストーリー(ワイルドカードフィルターを使用して新しいトピックが表示された場合)-新しい接続を開くだけでなく、すべての接続を閉じてから再び開きます。
だから、これがあなたの質問に答えることを願っています-リバランスが始まるとフェッチが停止します。