Kafka 滚动重启——在生产集群上执行 Kafka 滚动重启的正确方法是什么

jes*_*ica 3 linux apache-kafka

我们使用的是 Kafka 版本 - 2.7.1。集群包括 5 台 Linux RHEL 7.6 版本上的 Kafka 机器

\n

我们希望在所有 5 个代理上执行 Kafka 重启,但由于 Kafka 集群是生产集群,因此滚动重启应该是正确的方法。

\n

所以我们编写了 bash 脚本来执行以下操作

\n
    \n
  1. 停止 kafka01 代理(通过systemctl命令)
  2. \n
  3. 验证没有 Kafka PID(进程)
  4. \n
  5. 启动kafka01经纪人
  6. \n
  7. 验证 kafka01 正在监听 Kafka 端口 6667
  8. \n
\n

除了上述步骤 \xe2\x80\x93 1-4 之外,在 kafka02、kafka03、kafka04、kafka05 上继续执行相同的步骤 1-4。

\n

我们要添加有关 \xe2\x80\x93 的验证,验证启动 Kafka 代理后没有出现损坏的索引 (出现在 Kafka 日志 - server.log),然后再继续下一个 Kafka 代理

\n

但我们不确定是否需要这个额外步骤

\n

注意 - Kafka 代理重新启动后 - 通常server.log我们可以看到 Kafka 尝试修复损坏的索引(因此可能需要大约 10 分钟到 1 小时)

\n

Ran*_*ich 6

kafka-topics.sh --bootstrap-server kafka01:9092 --describe --under-replicated-partitions | wc -l
Run Code Online (Sandbox Code Playgroud)

重新启动代理后,请确保在转移到另一个代理之前没有复制不足的分区,

为了确保 kafka 集群中的一个代理不会出现中断,您需要确保所有主题都在使用replication.factor=3并且min.isr=2

为了不传递控制器(两次),您应该检查哪个代理是 kafka 控制器并最后重新启动它。

zookeeper-shell.sh [ZK_IP] get /controller
Run Code Online (Sandbox Code Playgroud)

您应该最后重新启动它以避免传递控制器,当重新启动此代理时,控制器角色将被分配给另一个正在运行的代理,因此最后重新启动它将确保您仅传递控制器一次