搜索

4.3. 执行 Kafka 代理的安全滚动重启

download PDF

此流程演示了如何在多节点集群中安全滚动重启代理。在升级或更改 Kafka 集群配置属性后,通常需要滚动重启。

注意

有些代理配置不需要重启代理。如需更多信息,请参阅 Apache Kafka 文档中的 更新 代理配置。

执行代理重启后,检查复制主题分区,以确保副本分区已捕获。

要实现不丢失可用性的正常重启,请确保复制主题,并且至少复制主题(min.insync.replicas)副本是同步的。min.insync.replicas 配置决定了必须确认写入被视为成功的最小副本数。

对于多节点集群,标准方法是具有最少为 3 的主题复制因素,并将最小 in-sync 副本设置为复制因素减 1。对于数据的持续时间,如果您在生成者配置中使用了 acks=all,在重新启动下一个代理前需要检查您重启的代理是否与所有它所同步的分区保持同步。

单节点集群在重启后不可用,因为所有分区都在同一个代理中。

先决条件

  • 一个 ZooKeeper 集群已被配置并运行
  • Kafka 集群按预期运行。

    检查有复制的分区或影响代理操作的任何其他问题。此流程中的步骤描述了如何检查有重复分区。

流程

在每个 Kafka 代理上执行以下步骤。在继续执行下一个代理前,在第一个代理上完成这些步骤。在最后一个活跃控制器的代理上执行步骤。否则,活动控制器需要在多个重启时更改。

  1. 停止 Kafka 代理:

    /opt/kafka/bin/kafka-server-stop.sh
  2. 对在完成后需要重启的代理配置进行任何更改。

    如需更多信息,请参阅以下内容:

  3. 重启 Kafka 代理:

    /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
  4. 检查 Kafka 是否正在运行:

    jcmd | grep kafka

    返回:

    process ID kafka.Kafka /opt/kafka/config/server.properties
  5. 使用 ncat 实用程序将 dump 命令发送到其中一个 ZooKeeper 节点,以验证所有节点是否为 Kafka 集群的成员。

    使用 ncat dump 检查 ZooKeeper 中注册的所有 Kafka 代理

    echo dump | ncat zoo1.my-domain.com 2181

    要使用包括四个字母的命令,如 dump,需要在 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

  6. 等待直到代理有 0 个重复分区。您可以从命令行检查或使用指标。

    • 使用带有 --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
      # …

      如果 ISR (同步副本)计数小于副本数,则会列出 in-replicated 分区。如果没有返回列表,则没有复制的分区。

    • 使用 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)
# ...

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.