第8章 KRaft モードへの移行


Kafka クラスターでのメタデータ管理に ZooKeeper を使用している場合は、KRaft モードで Kafka を使用するように移行できます。KRaft モードは ZooKeeper を置き換えて分散調整を行い、信頼性、スケーラビリティー、およびスループットを強化します。

移行中に、クラスター管理用の ZooKeeper に代わるコントローラーノードのクォーラムをノードプールとしてインストールします。アノテーション strimzi.io/kraft="migration" を適用することで、クラスター設定で KRaft 移行を有効にします。移行が完了したら、ブローカーを KRaft の使用に切り替え、アノテーション strimzi.io/kraft="enabled" を使用してコントローラーを移行モードから外します。

多くの 制限 があるため、移行を開始する前に、ご使用の環境が KRaft モードで Kafka をサポートできることを確認してください。次の点にも注意してください。

  • 移行は専用コントローラーノードでのみサポートされ、broker と controller の二重のロールを持つノードではサポートされません。
  • 移行プロセス全体を通じて、ZooKeeper ノードとコントローラーノードは一定期間並行して動作するため、クラスター内に十分なコンピュートリソースが必要になります。

前提条件

  • Kafka 3.7.0 以降と Streams for Apache Kafka 2.7 を使用している。以前のバージョンの Streams for Apache Kafka または Apache Kafka を使用している場合は、KRaft モードに移行する前にアップグレードしてください。
  • ZooKeeper ベースのデプロイメントが、次のものなしで動作していることが確認されている (KRaft モードではサポートされていないため)。

    • 双方向モードで実行される Topic Operator。単方向モードであるか、無効になっている必要があります。
    • JBOD ストレージ。jbod ストレージタイプを使用できますが、JBOD アレイにはディスクが 1 つだけ含まれている必要があります。
  • Kafka クラスターを管理する Cluster Operator が稼働している。
  • Kafka クラスターのデプロイメントで、Kafka ノードプールが使用されている。

    ZooKeeper ベースのクラスターがすでにノードプールを使用している場合は、移行する準備ができています。そうでない場合は、ノードプールを使用するようにクラスターを移行 できます。クラスターがノードプールを使用していないときに移行するには、broker ロールが割り当てられ、kafka という名前を持つ KafkaNodePool リソース設定にブローカーが含まれている必要があります。ノードプールのサポートは、Kafka リソース設定で strimzi.io/node-pools: enabled アノテーションを使用して有効にします。

この手順では、Kafka クラスター名は my-cluster であり、my-project namespace にあります。作成されたコントローラーノードプールの名前は、controller です。ブローカーのノードプールは kafka と呼ばれます。

手順

  1. Kafka クラスターの場合、controller ロールを持つノードプールを作成します。

    ノードプールは、コントローラーノードのクォーラムをクラスターに追加します。

    コントローラーノードプールの設定例

    Copy to Clipboard Toggle word wrap
    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaNodePool
    metadata:
      name: controller
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      replicas: 3
      roles:
        - controller
      storage:
        type: jbod
        volumes:
          - id: 0
            type: persistent-claim
            size: 20Gi
            deleteClaim: false
        resources:
          requests:
            memory: 64Gi
            cpu: "8"
          limits:
            memory: 64Gi
            cpu: "12"

    注記

    移行の場合、broker ロールと controller ロールを共有するノードのノードプールを使用することはできません。

  2. 新しい KafkaNodePool リソースを適用して、コントローラーを作成します。

    Cluster Operator ログに、ZooKeeper ベースの環境でのコントローラーの使用に関連するエラーが記録されることが予想されます。エラーにより調整がブロックされる可能性があります。これを防ぐには、すぐに次の手順を実行してください。

  3. アノテーション strimzi.io/kraftmigration に設定して、Kafka リソースで KRaft 移行を有効にします。

    Copy to Clipboard Toggle word wrap
    oc annotate kafka my-cluster strimzi.io/kraft="migration" --overwrite

    KRaft 移行の有効化

    Copy to Clipboard Toggle word wrap
    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
      namespace: my-project
      annotations:
        strimzi.io/kraft="migration"
    # ...

    アノテーションを Kafka リソース設定に適用すると、移行が開始します。

  4. コントローラーが起動し、ブローカーが起動したことを確認します。

    Copy to Clipboard Toggle word wrap
    oc get pods -n my-project

    出力には、ブローカーノードプールとコントローラーノードプール内のノードが表示されます

    Copy to Clipboard Toggle word wrap
    NAME                     READY  STATUS   RESTARTS
    my-cluster-kafka-0       1/1    Running  0
    my-cluster-kafka-1       1/1    Running  0
    my-cluster-kafka-2       1/1    Running  0
    my-cluster-controller-3  1/1    Running  0
    my-cluster-controller-4  1/1    Running  0
    my-cluster-controller-5  1/1    Running  0
    # ...

  5. 移行のステータスを確認します。

    Copy to Clipboard Toggle word wrap
    oc get kafka my-cluster -n my-project -w

    メタデータ状態の更新

    Copy to Clipboard Toggle word wrap
    NAME        ...  METADATA STATE
    my-cluster  ...  Zookeeper
    my-cluster  ...  KRaftMigration
    my-cluster  ...  KRaftDualWriting
    my-cluster  ...  KRaftPostMigration

    METADATA STATE は、Kafka メタデータの管理と操作の調整に使用されるメカニズムを示します。移行の開始時点では、これは ZooKeeper です。

    • ZooKeeper は、メタデータが ZooKeeper にのみ保存されている場合の初期状態です。
    • KRaftMigration は、移行が進行中の状態です。ZooKeeper から KRaft への移行を有効にするフラグ (zookeeper.metadata.migration.enable) がブローカーに追加され、ブローカーがロールされてコントローラーに登録されます。この時点では、クラスター内のトピックとパーティションの数に応じて移行に時間がかかる場合があります。
    • KRaftDualWriting は、Kafka クラスターが KRaft クラスターとして動作している一方で、メタデータは Kafka と ZooKeeper の両方に保存されているときの状態です。ブローカーは、フラグを削除して移行を有効にするために 2 回目のロールが行われます。
    • KRaftPostMigration は、ブローカーに対して KRaft モードが有効になっているときの状態です。メタデータは引き続き Kafka と ZooKeeper の両方に保存されます。

    移行ステータスは、Kafka リソースの status.kafkaMetadataState プロパティーでも表されます。

    警告

    この時点から、ZooKeeper の使用にロールバック できます。次のステップは、KRaft を有効にすることです。KRaft を有効にした後はロールバックを実行できません。

  6. メタデータの状態が KRaftPostMigration に達したら、アノテーション strimzi.io/kraftenabled に設定して、Kafka リソース設定で KRaft を有効にします。

    Copy to Clipboard Toggle word wrap
    oc annotate kafka my-cluster strimzi.io/kraft="enabled" --overwrite

    KRaft 移行の有効化

    Copy to Clipboard Toggle word wrap
    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
      namespace: my-project
      annotations:
        strimzi.io/kraft="enabled"
    # ...

  7. 完全な KRaft モードへの移行のステータスを確認します。

    Copy to Clipboard Toggle word wrap
    oc get kafka my-cluster -n my-project -w

    メタデータ状態の更新

    Copy to Clipboard Toggle word wrap
    NAME        ...  METADATA STATE
    my-cluster  ...  Zookeeper
    my-cluster  ...  KRaftMigration
    my-cluster  ...  KRaftDualWriting
    my-cluster  ...  KRaftPostMigration
    my-cluster  ...  PreKRaft
    my-cluster  ...  KRaft

    • PreKRaft は、ZooKeeper 関連のリソースがすべて自動的に削除された状態です。
    • KRaft は、KRaft の移行が完了した最終状態 (コントローラーのロール後) です。
    注記

    ZooKeeper の deleteClaim の設定によっては、その永続ボリューム要求 (PVC) および永続ボリューム (PV) が削除されない場合があります。deleteClaim は、クラスターのアンインストール時に PVC を削除するかどうかを指定します。デフォルトは false です。

  8. ZooKeeper 関連の設定を Kafka リソースから削除します。

    以下の設定が存在する場合は削除できます。

    • log.message.format.version
    • inter.broker.protocol.version
    • spec.zookeeper.* プロパティー

      log.message.format.versioninter.broker.protocol.version を削除すると、ブローカーとコントローラーが再びロールします。ZooKeeper プロパティーを削除すると、KRaft で操作されるクラスターに存在する ZooKeeper 設定に関連する警告メッセージが削除されます。

移行時のロールバックの実行

Kafka リソースで KRaft を有効にして移行が完了し、状態が KRaft 状態となる前に、次のようにロールバック操作を実行できます。

  1. アノテーション strimzi.io/kraft="rollback"Kafka リソースに適用して、ブローカーをロールバックします。

    Copy to Clipboard Toggle word wrap
    oc annotate kafka my-cluster strimzi.io/kraft="rollback" --overwrite

    KRaft 移行のロールバック

    Copy to Clipboard Toggle word wrap
    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
      namespace: my-project
      annotations:
        strimzi.io/kraft="rollback"
    # ...

    上記のロールバックを行うには、移行プロセスが KRaftPostMigration 状態である必要があります。ブローカーはロールバックされ、再び ZooKeeper に接続できるようになり、状態は KRaftDualWriting に戻ります。

  2. コントローラーノードプールを削除します。

    Copy to Clipboard Toggle word wrap
    oc delete KafkaNodePool controller -n my-project
  3. アノテーション strimzi.io/kraft="disabled"Kafka リソースに適用して、メタデータの状態を ZooKeeper に返します。

    Copy to Clipboard Toggle word wrap
    oc annotate kafka my-cluster strimzi.io/kraft="disabled" --overwrite

    ZooKeeper の使用への切り替え

    Copy to Clipboard Toggle word wrap
    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
      namespace: my-project
      annotations:
        strimzi.io/kraft="disabled"
    # ...

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat, Inc.