5.3. Kafka の設定
Kafka はプロパティーファイルを使用して静的設定を保存します。推奨される設定ファイルの場所は /opt/kafka/config/kraft/
です。設定ファイルは kafka
ユーザーが読み取れる必要があります。
Streams for Apache Kafka には、製品のさまざまな基本機能と高度な機能を紹介するサンプル設定ファイルが付属しています。ファイルは Streams for Apache Kafka インストールディレクトリー内の config/kraft/
にあり、次のものがあります。
-
(デフォルト) 組み合わせたモードで実行されるノードについては
config/kraft/server.properties
-
ブローカーとして実行されるノードについては
config/kraft/broker.properties
-
コントローラーとして実行されるノードについては
config/kraft/controller.properties
この章では、最も重要な設定オプションを説明します。
5.3.1. リスナー
リスナーは、Kafka ブローカーへの接続に使用されます。各 Kafka ブローカーは、複数のリスナーを使用するように設定できます。リスナーごとに異なる設定が必要なため、別のポートまたはネットワークインターフェイスでリッスンできます。
リスナーを設定するには、Kafka 設定プロパティーファイルの listeners
プロパティーを編集します。listeners
プロパティーにコンマ区切りのリストとしてリスナーを追加します。各プロパティーを以下のように設定します。
<listener_name>://<hostname>:<port>
<hostname>
が空の場合、Kafka は java.net.InetAddress.getCanonicalHostName()
クラスをホスト名として使用します。
複数のリスナーの設定例
listeners=internal-1://:9092,internal-2://:9093,replication://:9094
Kafka クライアントが Kafka クラスターに接続する場合は、最初にクラスターノードの 1 つである ブートストラップサーバー に接続します。ブートストラップサーバーはクライアントにクラスター内のすべてのブローカーのリストを提供し、クライアントは各ブローカーに個別に接続します。ブローカーのリストは、設定された listeners
に基づいています。
アドバタイズされたリスナー
任意で、advertised.listeners
プロパティーを使用して、listeners
プロパティーに指定されたものとは異なるリスナーアドレスのセットをクライアントに提供できます。これは、プロキシーなどの追加のネットワークインフラストラクチャーがクライアントとブローカー間にある場合や、IP アドレスの代わりに外部 DNS 名が使用されている場合に便利です。
advertised.listeners
プロパティーは listeners
プロパティーと同じ方法でフォーマットされます。
アドバタイズされたリスナーの設定例
listeners=internal-1://:9092,internal-2://:9093 advertised.listeners=internal-1://my-broker-1.my-domain.com:1234,internal-2://my-broker-1.my-domain.com:1235
アドバタイズされたリスナーの名前は、listeners
プロパティーに記載されているものと一致する必要があります。
ブローカー間リスナー
ブローカー間リスナー は、Kafka ブローカー間の通信に使用されます。ブローカー間通信は以下に必要です。
- 異なるブローカー間のワークロードの調整
- 異なるブローカーに保存されているパーティション間でのメッセージのレプリケーション
ブローカー間リスナーは、任意のポートに割り当てることができます。複数のリスナーが設定されている場合、ブローカー設定の inter.broker.listener.name
プロパティーでブローカー間リスナーの名前を定義できます。
ここでは、ブローカー間リスナーの名前を REPLICATION
とします。
listeners=REPLICATION://0.0.0.0:9091 inter.broker.listener.name=REPLICATION
コントローラーリスナー
コントローラー設定は、クラスターの調整と、ブローカーおよびパーティションのステータスを追跡するためのメタデータの管理とを行うコントローラーと接続および通信するために使用されます。
デフォルトでは、コントローラーとブローカー間の通信には専用のコントローラーリスナーが使用されます。コントローラーは、パーティションリーダーシップの変更などの管理タスクを調整するため、これらのリスナーが 1 つ以上必要です。
controller.listener.names
プロパティーを使用して、コントローラーに使用するリスナーを指定します。controller.quorum.voters
プロパティーを使用して、コントローラー投票者のクォーラムを指定できます。クォーラムにより、管理タスクのリーダーとフォロワーの構造が有効になります。リーダーは操作をアクティブに管理し、フォロワーはホットスタンバイとして、メモリー内のメタデータの整合性を確保し、フェイルオーバーを容易にします。
listeners=CONTROLLER://0.0.0.0:9090 controller.listener.names=CONTROLLER controller.quorum.voters=1@localhost:9090
コントローラー投票者の形式は <cluster_id>@<hostname>:<port>
です。
5.3.2. ログのコミット
Apache Kafka は、プロデューサーから受信するすべてのレコードをコミットログに保存します。コミットログには、Kafka が配信する必要がある実際のデータ (レコードの形式) が含まれます。これらのレコードは、ブローカーのアクティビティーの詳細を示すアプリケーションログファイルとは異なることに注意してください。
ログディレクトリー
log.dirs
プロパティーファイルを使用してログディレクトリーを設定し、1 つまたは複数のログディレクトリーにコミットログを保存できます。これは、インストール時に作成された /var/lib/kafka
ディレクトリーに設定する必要があります。
log.dirs=/var/lib/kafka
パフォーマンス上の理由から、log.dir を複数のディレクトリーに設定し、それぞれを別の物理デバイスに配置して、ディスク I/O のパフォーマンスを向上できます。以下に例を示します。
log.dirs=/var/lib/kafka1,/var/lib/kafka2,/var/lib/kafka3
5.3.3. ノード ID
ノード ID は、クラスター内の各ノード (ブローカーまたはコントローラー) の一意の識別子です。ノード ID として 0 以上の整数を割り当てることができます。ノード ID は、再起動またはクラッシュ後にノードを識別するために使用されます。そのため、ID が安定し、時間の経過とともに変更されないようにすることが重要です。
ノード ID は、Kafka 設定プロパティーファイルで設定されます。
node.id=1