第18章 ブローカーの追加または削除によるクラスターのスケーリング
ブローカーを追加して Kafka クラスターをスケーリングすると、クラスターのパフォーマンスと信頼性が向上します。ブローカーを追加すると、利用可能なリソースが増加し、クラスターがより大きなワークロードを処理し、より多くのメッセージを処理できるようになります。また、より多くのレプリカとバックアップを提供することでフォールトトレランスを向上させることもできます。逆に、十分に活用されていないブローカーを削除すると、リソースの消費が削減され、効率が向上します。中断やデータ損失を避けるために、スケーリングは慎重に行う必要があります。クラスター内のすべてのブローカーにパーティションを再分散することにより、各ブローカーのリソース使用率が削減され、クラスターの全体的なスループットが向上します。
Kafka トピックのスループットを向上させるには、そのトピックのパーティションの数を増やすことができます。これにより、トピックの負荷をクラスター内の異なるブローカー間で共有できるようになります。ただし、すべてのブローカーが特定のリソース (I/O など) によって制約されている場合、パーティションを追加してもスループットは向上しません。この場合、クラスターにブローカーをさらに追加する必要があります。
Kafka.spec.kafka.replicas
設定を調整すると、レプリカとして機能するクラスター内のブローカーの数に影響します。トピックの実際のレプリケーション係数は、default.replication.factor
および min.insync.replicas
の設定、および使用可能なブローカーの数によって決まります。たとえば、レプリケーション係数 3 は、トピックの各パーティションが 3 つのブローカー間でレプリケーションされ、ブローカーに障害が発生した場合のフォールトトレランスを確保することを意味します。
レプリカ設定の例
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster spec: kafka: replicas: 3 # ... config: # ... default.replication.factor: 3 min.insync.replicas: 2 # ...
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
replicas: 3
# ...
config:
# ...
default.replication.factor: 3
min.insync.replicas: 2
# ...
Kafka
リソース設定を通じてブローカーを追加する場合、ノード ID は 0 (ゼロ) から始まり、Cluster Operator は次に小さい ID を新しいノードに割り当てます。ブローカーの削除プロセスは、クラスター内で最も高い ID を持つブローカー Pod から開始されます。
ノードプールを使用してクラスター内のノードを管理している場合は、KafkaNodePool.spec.replicas
設定を調整して、ノードプール内のノードの数を変更します。さらに、ノードプールを使用して既存のクラスターをスケーリングする場合は、スケーリング操作用のノード ID を割り当てる ことができます。
ブローカーを追加または削除しても、Kafka はパーティションを自動的に再割り当てしません。これを行う最良の方法は、Cruise Control を使用することです。クラスターをスケールアップまたはスケールダウンするときに、Cruise Control の add-brokers
モードと remove-brokers
モードを使用できます。
-
Kafka クラスターをスケールアップした後、
add-brokers
モードを使用して、パーティションレプリカを既存のブローカーから新しく追加したブローカーに移動します。 -
Kafka クラスターをスケールダウンする前に、
remove-brokers
モードを使用して、削除されるブローカーからパーティションレプリカを移動します。
18.1. スケールダウン操作でのチェックのスキップ
デフォルトでは、Streams for Apache Kafka は、Kafka クラスターでスケールダウン操作を開始する前に、ブローカー上にパーティションレプリカが存在しないことをチェックします。このチェックは、broker 専用ロール、または broker と controller の二重のロールを実行するノードプール内のノードに適用されます。
レプリカが見つかった場合、データ損失の可能性を防ぐためにスケールダウンは行われません。クラスターをスケールダウンするには、ブローカーを再度スケールダウンする前に、ブローカー上にレプリカを残さないようにする必要があります。
ただし、このメカニズムをバイパスすることが必要な場合もあります。たとえば、新しいトピックがブローカーのレプリカを生成し続けるため、ビジー状態のクラスターではチェックを無効にする必要がある場合があります。この状況では、ブローカーがほぼ空の場合でも、スケールダウンが無期限にブロックされる可能性があります。この方法でブロックメカニズムをオーバーライドすると、影響が生じます。スケールダウンされているブローカー上にトピックが存在すると、Kafka クラスターの調整エラーが発生する可能性があります。
Kafka クラスターの Kafka
リソースにアノテーションを付けると、ブロックメカニズムを回避できます。strimzi.io/skip-broker-scaledown-check
アノテーションを true
に設定して、リソースにアノテーションを付けます。
スケールダウン操作のチェックをスキップするためのアノテーションの追加
oc annotate Kafka my-kafka-cluster strimzi.io/skip-broker-scaledown-check="true"
oc annotate Kafka my-kafka-cluster strimzi.io/skip-broker-scaledown-check="true"
このアノテーションは、Streams for Apache Kafka にスケールダウンチェックをスキップするように指示します。my-kafka-cluster
は、特定の Kafka
リソースの名前に置き換えます。
スケールダウン操作のチェックを復元するには、アノテーションを削除します。
スケールダウン操作のチェックをスキップするためのアノテーションの削除
oc annotate Kafka my-kafka-cluster strimzi.io/skip-broker-scaledown-check-
oc annotate Kafka my-kafka-cluster strimzi.io/skip-broker-scaledown-check-