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

クラスターにブローカーを追加する際は、いくつかのステップが必要となります。以下、主なステップを簡単に示します。

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

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

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

スケールアップ

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

  1. Kafka の CR で Kafka レプリカの数を増やします。

    kafka:
      replicas:
    
  2. 新しい設定で Kafka をアップデートします。

    kubectl apply -f <Kafka CR file>
    
  3. 新しいブローカー用に適切な DNS レコードが構成されていることを確認します。また、nslookup などのコマンドを使用して、CFK が新しいブローカーのホスト名を解決できることを確認します。

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

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

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

    3. 追加エントリーを hostAliases に追加する」の説明に従って、新しいブローカーホストを /etc/hosts ファイルに追加し、アップデートされたファイルを CFK ポッドに挿入します。

スケールダウン

Confluent for Kubernetes では、一度に 1 ブローカーずつ Kafka クラスターをスケールダウンする必要があります。複数のブローカーを一度に減らして Kafka クラスターをスケールダウンすることはサポートされません。

Confluent for Kubernetes によって 1 ブローカー分、Kafka クラスターがスケールダウンされると、ブローカーポッドとその土台となる persistentVolume が削除されます。そのブローカーに格納されていたパーティションはすべて削除されます。

Kafka クラスターをスケールダウンするには、次の手順に従います。

  1. Kafka ブローカーの数を 1 つ減らします。

    kafka:
      replicas: 4 # In this example, scaling down from 5
    
  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.

kafka:
  configOverrides:
    server:
      - confluent.balancer.enable= true
      - confluent.balancer.heal.uneven.load.trigger=

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