3.5. KRaft モードでの Kafka クラスターの実行
KRaft モードで Kafka クラスターを設定して実行します。クラスター内のノードは、ブローカー、コントローラー、またはその両方のロールを実行します。
- ブローカーのロール
- メッセージの保存と受け渡しを管理します。
- コントローラーのロール
- クラスターを調整し、メタデータを管理します。
- 複合的なロール
- 単一のノードがブローカーとコントローラーの両方として機能します。
安定性と可用性を確保するために、トピックレプリケーションを備えた 3 つのブローカーと 3 つのコントローラーを最低限設定することが推奨されます。内部の __cluster_metadata トピックには、クラスター全体の情報が格納されます。
前提条件
- Streams for Apache Kafka が 各ホストにインストールされており、設定ファイルが使用可能である。
-
この手順では、
kafka-storage.shツール、kafka-server-start.shツール、およびkafka-metadata-quorum.shツールを使用します。
手順
kafka-storageツールを使用して一意の Kafka クラスター ID を生成します。./bin/kafka-storage.sh random-uuidこの ID はすべてのノードで再利用されるため保存します。
各ノードの設定ファイルを作成します。
設定ファイルは、Kafka で提供されている例に基づいて作成します。
-
コントローラー専用ノードの
controller.properties -
ブローカー専用ノードの
broker.properties -
両方のロールを持つノードの
server.properties
注記サンプルの
server.propertiesファイルでは、静的クォーラム設定を目的としたcontroller.quorum.votersがデフォルトで使用されます。動的クォーラム (推奨) を使用するには、この手順に示すように、これをcontroller.quorum.bootstrap.serversに置き換えます。controller.propertiesファイルは、デフォルトでcontroller.quorum.bootstrap.serversを使用します。ノードごとに、以下のプロパティーを調整します。
node.id=1 process.roles=broker,controller controller.quorum.bootstrap.servers=node1:9093,node2:9093,node3:9093 listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 advertised.listeners=PLAINTEXT://node1:9092 inter.broker.listener.name=PLAINTEXT controller.listener.names=CONTROLLER log.dirs=/var/lib/kafka/data重要な考慮事項:
-
各ノードには一意の
node.idが必要です。 -
listenersのホスト名 (0.0.0.0) はすべてのインターフェイスにバインドされますが、必要に応じて各ノードごとに特定のホスト名または IP アドレスに変更できます。 -
advertised.listenersは、クライアントが Kafka ノードに接続するために使用する実際のアドレスを反映する必要があります。 -
設定ファイル内の
log.dirsパスは、メタデータが保存される場所を定義します。設定されていない場合は、デフォルトで一時的な場所に設定され、再起動時に消去されるため、開発にのみ適しています。
-
コントローラー専用ノードの
コントローラークォーラムをブートストラップします (コントローラーは 1 つのみ)。
./bin/kafka-storage.sh format --cluster-id <uuid> --standalone --config ./config/controller.propertiesこれにより、メタデータログが初期化され、クォーラムがブートストラップされます。1 つのノードでのみ使用してください。
<uuid>は、生成されたクラスター ID に置き換えます。注記複数のコントローラーでブートストラップするには、代わりに
--initial-controllersを使用します。コントローラーを起動します。
./bin/kafka-server-start.sh ./config/controller.propertiesすべてのノードで
controller.quorum.bootstrap.serversが正しく設定され、コントローラーが起動されていることを確認します。残りのノード (ブローカー) をフォーマットします。
./bin/kafka-storage.sh format --cluster-id <uuid> --config ./config/server.properties --no-initial-controllers各ノードのロールに基づいて適切な設定ファイルを使用します。すべてのノードに同じクラスター ID を使用します。この手順では、コントローラークォーラムを変更せずに各ノードのストレージを準備します。
各ブローカーノードを起動します。
./bin/kafka-server-start.sh ./config/server.propertiesKafka が稼働していることを確認します。
jcmd | grep kafka戻り値:
process ID kafka.Kafka ./config/server.properties各ノードのログをチェックして、KRaft クラスターに正常に参加していることを確認します。
tail -f ./logs/server.log
次のステップ
トピックを作成し、ブローカーからメッセージを送受信できるようになりました。
メッセージを渡すブローカーの場合、クラスター内のブローカー全体でトピックのレプリケーションを使用して、データの耐久性を確保できます。トピックのレプリケーション係数を少なくとも 3 に設定し、同期レプリカの最小数をレプリケーション係数より 1 少ない数に設定します (replication.factor=3、min.insync.replicas=2)。詳細は、「トピックの作成」 を参照してください。