Kafka クラスターのスケーリングとデータのバランス調整¶
クラスターにブローカーを追加する際は、いくつかのステップが必要となります。以下、主なステップを簡単に示します。
- 新しいブローカーごとに構成を定義します。
- ストレージリソース、ネットワークリソース、コンピュートリソースをブローカーにプロビジョニングします。
- 定義済みの構成とプロビジョニング済みのリソースでブローカーを起動します。
- 新しいブローカーが負荷を分担してクラスター全体のパフォーマンスが向上するよう、クラスター全体にパーティションを再割り当てします。
Confluent for Kubernetes は、上記のプロセスを自動化するために Self-Balancing を活用します(CFK ではデフォルトで有効)。
Self-Balancing を手動で有効にする必要がある場合の手順については、「Self-Balancing の有効化」を参照してください。
スケールアップ¶
Kafka クラスターをスケールアップするには、次の手順に従います。
Kafka の CR で Kafka レプリカの数を増やします。
kafka: replicas:
新しい設定で Kafka をアップデートします。
kubectl apply -f <Kafka CR file>
新しいブローカー用に適切な DNS レコードが構成されていることを確認します。また、
nslookup
などのコマンドを使用して、CFK が新しいブローカーのホスト名を解決できることを確認します。DNS サービスではなく
hosts
ファイルを使用している場合は、hosts
ファイルを新しいブローカーの情報でアップデートしてください。以下に例を示します。新しいブローカーの IP アドレスを取得します。
kubectl get services -n <namespace>
ブローカープレフィックスを使用して既存のブローカーホスト名を参照し、新しいブローカーのホスト名を取得します。
「追加エントリーを hostAliases に追加する」の説明に従って、新しいブローカーホストを
/etc/hosts
ファイルに追加し、アップデートされたファイルを CFK ポッドに挿入します。
スケールダウン¶
Confluent for Kubernetes では、一度に 1 ブローカーずつ Kafka クラスターをスケールダウンする必要があります。複数のブローカーを一度に減らして Kafka クラスターをスケールダウンすることはサポートされません。
Confluent for Kubernetes によって 1 ブローカー分、Kafka クラスターがスケールダウンされると、ブローカーポッドとその土台となる persistentVolume が削除されます。そのブローカーに格納されていたパーティションはすべて削除されます。
Kafka クラスターをスケールダウンするには、次の手順に従います。
Kafka ブローカーの数を 1 つ減らします。
kafka: replicas: 4 # In this example, scaling down from 5
そのブローカー上にあったパーティションが他の既存のブローカーにレプリケートされるまで待ちます。
パーティションがレプリケートされたかどうかは、Kafka のメトリックである
Total Under Replicated Partitions Across Kafka Brokers
を、Confluent Control Center の UI またはお使いのモニタリングソリューションで見て確認できます。この値が0
になっている必要があります。この時間は、クラスターのサイズとトピック数によって変わる可能性があります。
目的のブローカー数になるまで上記の手順、つまり Kafka ブローカーの数を 1 つ減らして待つ作業を繰り返します。
Self-Balancing の有効化¶
To enable Self-Balancing and rebalance Kafka for any uneven load, pass the settings in
configOverrides
in the Kafka custom resource (CR) as shown below.
kafka:
configOverrides:
server:
- confluent.balancer.enable= true
- confluent.balancer.heal.uneven.load.trigger=
- Set confluent.balancer.enable
to
true
to enable Self-Balancing. - Set confluent.balancer.heal.uneven.load.trigger
to
ANY_UNEVEN_LOAD
to balance the load across the cluster whenever an imbalance is detected. The default isEMPTY_BROKER
.
Self-Balancing の管理に使用できる設定の網羅的なリストについては、「Self-Balancing Cluster の構成オプションおよびコマンド」を参照してください。