3.6. 执行 Kafka 代理的安全滚动重启
此流程演示了如何在多节点集群中安全滚动重启代理。在升级或更改 Kafka 集群配置属性后,通常需要滚动重启。
有些代理配置不需要重启代理。如需更多信息,请参阅 Apache Kafka 文档中的 更新 代理配置。
执行代理重启后,检查请求相关主题分区,以确保副本分区已耗尽。
要实现不丢失可用性的正常重启,请确保复制主题,并且至少复制主题(min.insync.replicas
)副本是同步的。min.insync.replicas
配置决定了必须确认写入被视为成功的最小副本数。
对于多节点集群,标准方法是具有最少为 3 的主题复制因素,并将最小 in-sync 副本设置为复制因素减 1。对于数据的持续时间,如果您在生成者配置中使用了 acks=all
,在重新启动下一个代理前需要检查您重启的代理是否与所有它所同步的分区保持同步。
单节点集群在重启后不可用,因为所有分区都在同一个代理中。
先决条件
- 每个主机上安装了 Apache Kafka 的流,且配置文件可用。
Kafka 集群按预期运行。
检查有复制的分区或影响代理操作的任何其他问题。此流程中的步骤描述了如何检查有重复分区。
流程
在每个 Kafka 代理上执行以下步骤。在继续执行下一个代理前,在第一个代理上完成这些步骤。在最后充当控制器的代理上执行步骤。否则,控制器需要在多个重启时更改。
停止 Kafka 代理:
/opt/kafka/bin/kafka-server-stop.sh
对在完成后需要重启的代理配置进行任何更改。
如需更多信息,请参阅以下内容:
重启 Kafka 代理:
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties
检查 Kafka 是否正在运行:
jcmd | grep kafka
返回:
process ID kafka.Kafka /opt/kafka/config/kraft/server.properties
检查每个节点的日志,以确保它们已成功加入 KRaft 集群:
tail -f /opt/kafka/logs/server.log
等待直到代理有 0 个重复分区。您可以从命令行检查或使用指标。
使用带有
--under-replicated-partitions
参数的kafka-topics.sh
命令:/opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_host>:<port> --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 # …
如果 ISR (同步副本)计数小于副本数,则会列出 in-replicated 分区。如果没有返回列表,则没有复制的分区。
使用
UnderReplicatedPartitions
指标:kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions
指标提供副本未捕获的分区计数。您等到计数为零。
提示当主题有一个或多个重复分区时,请使用 Kafka Exporter 创建警报。
重启时检查日志
如果代理无法启动,请检查应用程序日志中的信息。您还可以检查代理关闭的状态,并在 /opt/kafka/logs/server.log
应用程序日志中重启。