第14章 ブローカーの追加または削除によるクラスターのスケーリング
ブローカーを追加して Kafka クラスターをスケーリングすると、クラスターのパフォーマンスと信頼性が向上します。ブローカーを追加すると、利用可能なリソースが増加し、クラスターがより大きなワークロードを処理し、より多くのメッセージを処理できるようになります。また、より多くのレプリカとバックアップを提供することでフォールトトレランスを向上させることもできます。逆に、十分に活用されていないブローカーを削除すると、リソースの消費が削減され、効率が向上します。中断やデータ損失を避けるために、スケーリングは慎重に行う必要があります。クラスター内のすべてのブローカーにパーティションを再分散することにより、各ブローカーのリソース使用率が削減され、クラスターの全体的なスループットが向上します。
Kafka トピックのスループットを向上させるには、そのトピックのパーティションの数を増やすことができます。これにより、トピックの負荷をクラスター内の異なるブローカー間で共有できるようになります。ただし、すべてのブローカーが特定のリソース (I/O など) によって制約されている場合、パーティションを追加してもスループットは向上しません。この場合、クラスターにブローカーをさらに追加する必要があります。
マルチノード Kafka クラスターの実行時にブローカーを追加すると、レプリカとして機能するクラスター内のブローカーの数に影響します。トピックの実際のレプリケーション係数は、default.replication.factor および min.insync.replicas の設定、および使用可能なブローカーの数によって決まります。たとえば、レプリケーション係数 3 は、トピックの各パーティションが 3 つのブローカー間でレプリケーションされ、ブローカーに障害が発生した場合のフォールトトレランスを確保することを意味します。
レプリカ設定の例
default.replication.factor = 3
min.insync.replicas = 2
ブローカーを追加または削除しても、Kafka はパーティションを自動的に再割り当てしません。これを行う最良の方法は、Cruise Control を使用することです。クラスターをスケールアップまたはスケールダウンするときに、Cruise Control の add_broker モードと remove_broker モードを使用できます。
-
Kafka クラスターをスケールアップした後、
add_brokerモードを使用して、パーティションレプリカを既存のブローカーから新しく追加されたブローカーに移動します。 -
Kafka クラスターをスケールダウンする前に、
remove_brokerモードを使用して、削除するブローカーからパーティションレプリカを移動します。
14.1. コントローラークラスターを動的にスケーリングする リンクのコピーリンクがクリップボードにコピーされました!
動的コントローラークォーラムは、システムのダウンタイムを必要とせずにスケーリングをサポートします。動的スケーリングは、コントローラーの追加や削除に役立つだけでなく、次の機能もサポートします。
- ハードウェア障害によるコントローラーの交換
- クラスターの新しいマシンへの移行
- ノードを専用コントローラーロールから組み合わせたロールへ、またはその逆へ移動する
動的クォーラムは、各コントローラーの host:port エンドポイントをリストする controller.quorum.bootstrap.servers プロパティーを使用してコントローラー設定で指定されます。コントローラーのクラスターへの追加またはクラスターからの削除は、一度に 1 つだけ可能です。したがって、複雑なクォーラムの変更は、一連の単一の変更として実装されます。新しいコントローラーは オブザーバー として参加し、メタデータログをレプリケートしますが、クォーラムにはカウントされません。アクティブコントローラーに追いつくと、新しいコントローラーはクォーラムに参加できるようになります。
コントローラーを削除するときは、不要なリーダー選出を避けるために、最初にコントローラーをシャットダウンすることを推奨します。削除されたコントローラーがアクティブなコントローラーである場合、新しいクォーラムの確認後にのみクォーラムから離脱します。ただし、__cluster_metadata ログ内の最後のコミット位置を計算するときには、それ自体は含まれません。
動的クォーラムでは、すべてのクラスターノードのアクティブな Kraft バージョンは 1 以上になります。kafka-features.sh ツールを使用して、アクティブな KRaft バージョンを見つけます。
./bin/kafka-features.sh --bootstrap-controller localhost:9093 describe | grep kraft.version
この出力例では、Kafka クラスター内のアクティブなバージョン (FinalizedVersionLevel) は 1 です。
Feature: kraft.version SupportedMinVersion: 0 SupportedMaxVersion: 1 FinalizedVersionLevel: 1 Epoch: 5
kraft.version プロパティーにアクティブバージョンレベル 0 が表示されるか存在しない場合は、静的クォーラムを使用しています。1 以上の場合は、動的クォーラムを使用しています。
静的クォーラムを設定することは可能ですが、スケーリング時にダウンタイムが必要になるため、推奨される方法ではありません。