Confluent Platform クラスターのスケーリングとデータのバランス調整¶
Kafka クラスターのスケーリング¶
クラスターにブローカーを追加する際は、次のようなステップが必要となります。
- 新しいブローカーごとに構成を定義します。
- ストレージリソース、ネットワークリソース、コンピュートリソースをブローカーにプロビジョニングします。
- 定義済みの構成とプロビジョニング済みのリソースでブローカーを起動します。
- 新しいブローカーが負荷を分担してクラスター全体のパフォーマンスが向上するよう、クラスター全体にパーティションを再割り当てします。
Confluent for Kubernetes (CFK)は、上記のプロセスを自動化するために Self-Balancing (CFK ではデフォルトで有効になっています)を活用します。
Self-Balancing を手動で有効にする必要がある場合の手順については、「Self-Balancing の有効化」を参照してください。
Kafka クラスターのスケールアップ¶
Kafka クラスターをスケールアップするには、次の手順に従います。
以下のいずれかの方法を使用して、Kafka レプリカの数を増やします。
次の
kubectl scale
コマンドを使用します。kubectl scale kafka <Kafka-CR-name> --replicas=N
Kafka のカスタムリソース(CR)で Kafka レプリカの数を増やし、
kubectl apply
コマンドを使用して新しい設定を適用します。spec: replicas:
新しいブローカー用に適切な DNS レコードが構成されていることを確認します。また、
nslookup
などのコマンドを使用して、CFK が新しいブローカーのホスト名を解決できることを確認します。DNS サービスではなく
hosts
ファイルを使用している場合は、hosts
ファイルを新しいブローカーの情報でアップデートしてください。以下に例を示します。新しいブローカーの IP アドレスを取得します。
kubectl get services -n <namespace>
ブローカープレフィックスを使用して既存のブローカーホスト名を参照し、新しいブローカーのホスト名を取得します。
「追加エントリーを hostAliases に追加する」の説明に従って、新しいブローカーホストを
/etc/hosts
ファイルに追加し、アップデートされたファイルを CFK ポッドに挿入します。
Kafka クラスターのスケールダウン¶
Kafka クラスターをスケールダウンする場合は、2 つのオプションがあります。
自動スケールダウン
このオプションは、Confluent Platform の 7.x 以降のバージョンでサポートされています。
手動スケールダウン
このオプションは、Confluent Platform の 6.x 以降のバージョンでサポートされています。
上記のどちらのオプションでも、Kafka ブローカーの数が、Kafka クラスターのどのトピックの最大レプリケーション係数よりも小さくならないようにしてください。CFK により、デフォルトのレプリケーション係数である 3 が Kafka のトピックすべてに設定されます。
Kafka クラスターの自動スケールダウン¶
Confluent Platform 7.x 以降では、CFK で Kafka クラスターがスケールダウンされるようにすることができます。
CFK は Self-Balancing 機能を活用して、CFK でデフォルトで有効になっている縮小プロセスを自動化します。
CFK で自動的にクラスターがスケールダウンされるようにするには、次の要件を満たす必要があります。
「Kafka Admin REST API」の説明に従って Admin REST API をセットアップします。CFK は、Kafka クラスターが実行されている名前空間で KafkaRestClass リソースを使用します。
Admin REST API が、REST クライアントの基本認証でセットアップされている場合は、
basic.txt
で最初に記述されているユーザーを使用してクラスターが縮小されます。basic.txt
の詳細については、「基本認証」を参照してください。この最初のユーザーのロールは、Kafka カスタムリソース(CR)の
spec.services.kafkaRest.authentication.basic.roles
の下に記述されている必要があります。Kafka ブローカーが DirectoryPathInContainer 機能を使用して認証情報を指定して、Confluent Admin REST API または MDS に対して認証する場合は、自動スケールダウン機能を使用できません。代わりに、Kubernetes シークレットを使用して認証情報を指定して、Confluent Admin REST API または MDS に対して認証する場合は、自動スケールダウン機能を使用できます。
Kafka クラスターの自動スケールダウンを行うには、以下の手順に従います。
Kafka クラスターが安定していることを確認します。
アノテーションを使用して、この機能を有効にします。
kubectl annotate <Kafka CR name> platform.confluent.io/enable-shrink="true"
Kafka の CR でブローカーの数を減らし、
kubectl apply
コマンドを使用して変更を適用します。spec: replicas:
replicas:
は、3
より小さい値に設定しないでください。CFK によってワークフローがトリガーされて、Kafka のカスタムリソース(CR)でアップデートされた
replicas
の値に従って Kafka クラスターが縮小されます。
Kafka クラスターの手動スケールダウン¶
Confluent Platform 6.x では、一度に 1 ブローカーずつ Kafka クラスターをスケールダウンする必要があります。複数のブローカーをまとめて減らして Kafka クラスターをスケールダウンすることはできません。
CFK によって 1 ブローカー分、Kafka クラスターがスケールダウンされると、ブローカーポッドとその土台となる persistentVolume が削除されます。これにより、そのブローカーに格納されていたパーティションはすべて削除されます。
Kafka クラスターを手動でスケールダウンするには、次の手順に従います。
以下のいずれかの方法を使用して、Kafka ブローカーの数を 1 つずつ減らします。Kafka ブローカーの数は、
3
より小さい値に設定しないでください。たとえば、Kafka を
5
から4
にスケールダウンします。次の
kubectl scale
コマンドを使用します。kubectl scale kafka <Kafka-CR-name> --replicas=4
Kafka の CR で Kafka レプリカの数を減らして、
kubectl apply
コマンドを使用して新しい設定を適用します。spec: replicas: 4
そのブローカー上にあったパーティションが他の既存のブローカーにレプリケートされるまで待ちます。
パーティションがレプリケートされたかどうかは、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.
spec:
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 の構成オプションおよびコマンド」を参照してください。
その他の Confluent Platform クラスターのスケーリング¶
他の Confluent Platform コンポーネントをスケールアップまたはスケールダウンするには、以下のコマンドを使用します。
kubectl scale <CP-component-CR-kind> <component-CR-name> --replicas=N