Confluent Platform クラスターのスケーリングとデータのバランス調整

Kafka クラスターのスケーリング

クラスターにブローカーを追加する際は、次のようなステップが必要となります。

  • 新しいブローカーごとに構成を定義します。
  • ストレージリソース、ネットワークリソース、コンピュートリソースをブローカーにプロビジョニングします。
  • 定義済みの構成とプロビジョニング済みのリソースでブローカーを起動します。
  • 新しいブローカーが負荷を分担してクラスター全体のパフォーマンスが向上するよう、クラスター全体にパーティションを再割り当てします。

Confluent for Kubernetes (CFK)は、上記のプロセスを自動化するために Self-Balancing (CFK ではデフォルトで有効になっています)を活用します。

Self-Balancing を手動で有効にする必要がある場合の手順については、「Self-Balancing の有効化」を参照してください。

Kafka クラスターのスケールアップ

Kafka クラスターをスケールアップするには、次の手順に従います。

  1. 以下のいずれかの方法を使用して、Kafka レプリカの数を増やします。

    • 次の kubectl scale コマンドを使用します。

      kubectl scale kafka <Kafka-CR-name> --replicas=N
      
    • Kafka のカスタムリソース(CR)で Kafka レプリカの数を増やし、kubectl apply コマンドを使用して新しい設定を適用します。

      spec:
        replicas:
      
  2. 新しいブローカー用に適切な DNS レコードが構成されていることを確認します。また、nslookup などのコマンドを使用して、CFK が新しいブローカーのホスト名を解決できることを確認します。

    DNS サービスではなく hosts ファイルを使用している場合は、hosts ファイルを新しいブローカーの情報でアップデートしてください。以下に例を示します。

    1. 新しいブローカーの IP アドレスを取得します。

      kubectl get services -n <namespace>
      
    2. ブローカープレフィックスを使用して既存のブローカーホスト名を参照し、新しいブローカーのホスト名を取得します。

    3. 追加エントリーを 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 機能を利用して縮小プロセスを自動化します。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 への認証を行うための認証情報が指定されている場合は、Vault をセットアップし、CFK をデプロイする前に必要な Vault アノテーションを CFK の Helm の値に追加する必要があります。

    既存の CFK ポッドをアップデートする場合は、CFK の Helm の値をアップデートした後に CFK ポッドをローリングする必要があります。詳細については、「CR のない Confluent Platform の処理へのシークレットの提供」を参照してください。

Kafka クラスターの自動スケールダウンを行うには、以下の手順に従います。

  1. Kafka クラスターが安定していることを確認します。

  2. アノテーションを使用して、この機能を有効にします。

    kubectl annotate <Kafka CR name> platform.confluent.io/enable-shrink="true"
    
  3. 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 クラスターを手動でスケールダウンするには、次の手順に従います。

  1. 以下のいずれかの方法を使用して、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
      
  2. そのブローカー上にあったパーティションが他の既存のブローカーにレプリケートされるまで待ちます。

    パーティションがレプリケートされたかどうかは、Kafka のメトリックである Total Under Replicated Partitions Across Kafka Brokers を、Confluent Control Center の UI またはお使いのモニタリングソリューションで見て確認できます。この値が 0 になっている必要があります。

    この時間は、クラスターのサイズとトピック数によって変わる可能性があります。

  3. 上記の手順、つまり、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=

Self-Balancing の管理に使用できる設定の網羅的なリストについては、「Self-Balancing Cluster の構成オプションおよびコマンド」を参照してください。

その他の Confluent Platform クラスターのスケーリング

他の Confluent Platform コンポーネントをスケールアップまたはスケールダウンするには、以下のコマンドを使用します。

kubectl scale <CP-component-CR-kind> <component-CR-name> --replicas=N