4.3. Kafka ブローカーの正常なローリング再起動の実行
この手順では、マルチノードクラスターでブローカーの正常なローリング再起動を実行する方法を説明します。通常、Kafka クラスター設定プロパティーのアップグレードまたは変更後にローリング再起動が必要です。
一部のブローカー設定では、ブローカーの再起動は必要ありません。詳細は、Apache Kafka ドキュメントの Updating Broker Configs を参照してください。
ブローカーの再起動後に、レプリケーションの数が最低数未満であるトピックパーティションがないかをチェックして、レプリカパーティションの数が十分にあることを確認します。
可用性を失わずに正常な再起動を実現するには、トピックをレプリケーションしていること、および少なくとも最小数のレプリカ (min.insync.replicas
) が同期していることを確認してください。min.insync.replicas
設定は、書き込みを成功とみなすために書き込みを確認する必要のあるレプリカの最小数を決定します。
マルチノードクラスターの場合に、標準的な方法として、トピックレプリケーション係数を 3 以上に、In-Sync レプリカの最小数をレプリケーション係数よりも 1 少なく設定します。データの持続性のためにプロデューサー設定で acks=all
を使用している場合は、再起動したブローカーが、次のブローカーを再起動する前にレプリケーションするすべてのパーティションと同期していることを確認します。
すべてのパーティションが同じブローカーにあるため、単一ノードのクラスターは再起動時に利用できなくなります。
前提条件
- ZooKeeper クラスターが 設定され、実行されている。
Kafka クラスターが想定どおりに動作している。
レプリケーションが不十分なパーティションや、ブローカーの動作に影響を与えるその他の問題がないかどうかを確認します。この手順では、レプリケーションが不十分なパーティションをチェックする方法を説明します。
手順
各 Kafka ブローカーで以下の手順を実行します。次のステップに進む前に、最初のブローカーの手順を完了してください。アクティブなコントローラーの最後のブローカーで手順を実行します。それ以外の場合、アクティブなコントローラーは、再起動を複数回行う時に変更する必要があります。
Kafka ブローカーを停止します。
/opt/kafka/bin/kafka-server-stop.sh
完了後に再起動を必要とするブローカー設定に変更を加えます。
詳細は、以下を参照してください。
Kafka ブローカーを再起動します。
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
Kafka が稼働していることを確認します。
jcmd | grep kafka
戻り値:
process ID kafka.Kafka /opt/kafka/config/server.properties
ncat
ユーティリティーを使用してdump
コマンドを ZooKeeper ノードのいずれかに送信し、すべてのノードが Kafka クラスターのメンバーであることを確認します。ncat dump を使用して、ZooKeeper に登録されているすべての Kafka ブローカーを確認します。
echo dump | ncat zoo1.my-domain.com 2181
dump
のような 4 文字のコマンドを使用するには、zookeeper.properties
で4lw.commands.whitelist=*
を指定する必要があります。出力には、起動した Kafka ブローカーが含まれている必要があります。
3 つのノードで設定される Kafka クラスターの ncat コマンドの出力例
SessionTracker dump: org.apache.zookeeper.server.quorum.LearnerSessionTracker@28848ab9 ephemeral nodes dump: Sessions with Ephemerals (3): 0x20000015dd00000: /brokers/ids/1 0x10000015dc70000: /controller /brokers/ids/0 0x10000015dc70001: /brokers/ids/2
ブローカで、レプリケーションが不十分なパーティションがゼロになるまで待ちます。コマンドラインから確認するか、メトリクスを使用できます。
--under-replicated-partitions
パラメーターを指定してkafka-topics.sh
コマンドを使用します。/opt/kafka/bin/kafka-topics.sh --bootstrap-server <bootstrap_address> --describe --under-replicated-partitions
以下に例を示します。
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --under-replicated-partitions
このコマンドは、クラスターでレプリケーションが不十分なパーティションのトピックのリストを表示します。
レプリケーションが不十分なパーティションのトピック
Topic: topic3 Partition: 4 Leader: 2 Replicas: 2,3 Isr: 2 Topic: topic3 Partition: 5 Leader: 3 Replicas: 1,2 Isr: 1 Topic: topic1 Partition: 1 Leader: 3 Replicas: 1,3 Isr: 3 # …
In-Sync レプリカ (ISR) の数がレプリカの数より少ない場合、レプリケーションが不十分なパーティションが一覧表示されます。リストが返されない場合は、レプリケーションが不十分なパーティションはありません。
UnderReplicatedPartitions
メトリックを使用します。kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions
このメトリックからは、レプリカが不十分なパーティションの数がわかります。数がゼロになるまで待機します。
ヒントトピックにレプリケーションが不十分なパーティションがあると、Kafka Exporter を使用してアラートを作成します。
再起動時のログの確認
ブローカーが起動できない場合は、アプリケーションログで情報を確認します。/opt/kafka/logs/server.log
アプリケーションログでブローカーのシャットダウンと再起動のステータスを確認することもできます。
ブローカーのシャットダウンに成功したログ
# ... [2022-06-08 14:32:29,885] INFO Terminating process due to signal SIGTERM (org.apache.kafka.common.utils.LoggingSignalHandler) [2022-06-08 14:32:29,886] INFO [KafkaServer id=0] shutting down (kafka.server.KafkaServer) [2022-06-08 14:32:29,887] INFO [KafkaServer id=0] Starting controlled shutdown (kafka.server.KafkaServer) [2022-06-08 14:32:29,896] INFO [KafkaServer id=0] Controlled shutdown request returned successfully after 6ms (kafka.server.KafkaServer) # ...
ブローカーの再起動に成功したログ
# ... [2022-06-08 14:39:35,245] INFO [KafkaServer id=0] started (kafka.server.KafkaServer) # ...