18.4. 升级 Kafka 代理和 ZooKeeper
在主机机器上升级 Kafka 代理和 ZooKeeper,以使用最新版本的 Apache Kafka。您可以更新安装文件,然后配置并重启所有 Kafka 代理以使用新的 inter-broker 协议版本。执行这些步骤后,数据会使用新的 inter-broker 协议版本在 Kafka 代理之间传输。
从 Kafka 3.0.0 开始,消息格式版本值被假定为与 inter.broker.protocol.version 匹配,不需要设置。该值反映了使用的 Kafka 版本。
先决条件
-
以
kafka用户身份登录 Red Hat Enterprise Linux。 您已在单独的主机上安装 Kafka 和其他 Kafka 组件。
更多信息请参阅 第 3.1 节 “安装环境”。
- 您已下载了 安装文件。
流程
对于 Apache Kafka 集群的流中的每个 Kafka 代理,一次一个:
从 Apache Kafka 软件下载页面 的 Streams for Apache Kafka 归档下载。
注意如有提示,登录到您的红帽帐户。
在命令行中,创建一个临时目录并提取
amq-streams-<version>-bin.zip文件的内容。mkdir /tmp/kafka unzip amq-streams-<version>-bin.zip -d /tmp/kafka
mkdir /tmp/kafka unzip amq-streams-<version>-bin.zip -d /tmp/kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果运行,停止 ZooKeeper 和主机上运行的 Kafka 代理。
/opt/kafka/bin/zookeeper-server-stop.sh /opt/kafka/bin/kafka-server-stop.sh jcmd | grep zookeeper jcmd | grep kafka
/opt/kafka/bin/zookeeper-server-stop.sh /opt/kafka/bin/kafka-server-stop.sh jcmd | grep zookeeper jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您在多节点集群中运行 Kafka,请参阅 第 4.3 节 “执行 Kafka 代理的安全滚动重启”。
从现有安装中删除
libs和bin目录:rm -rf /opt/kafka/libs /opt/kafka/bin
rm -rf /opt/kafka/libs /opt/kafka/binCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从临时目录中复制
libs和bin目录:cp -r /tmp/kafka/kafka_<version>/libs /opt/kafka/ cp -r /tmp/kafka/kafka_<version>/bin /opt/kafka/
cp -r /tmp/kafka/kafka_<version>/libs /opt/kafka/ cp -r /tmp/kafka/kafka_<version>/bin /opt/kafka/Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果需要,更新
config目录中的配置文件以反映新版本中的任何更改。 删除临时目录。
rm -r /tmp/kafka
rm -r /tmp/kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
/opt/kafka/config/server.properties属性文件。将
inter.broker.protocol.version和log.message.format.version属性设置为当前版本。例如,如果从 Kafka 版本 3.6.0 升级到 3.7.0,则当前版本是 3.6。
inter.broker.protocol.version=3.6 log.message.format.version=3.6
inter.broker.protocol.version=3.6 log.message.format.version=3.6Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您要从中升级的 Kafka 版本(
3.5、3.6等)使用正确的版本。将inter.broker.protocol.version保持不变在当前设置中,可确保代理可以在升级过程中继续相互通信。如果没有配置属性,请使用当前版本添加它们。
如果您要从 Kafka 3.0.0 或更高版本升级,则只需要设置
inter.broker.protocol.version。重启更新的 ZooKeeper 和 Kafka 代理:
/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 代理和 ZooKeeper 开始为最新的 Kafka 版本使用二进制文件。
有关在多节点集群中重启代理的详情,请参考 第 4.3 节 “执行 Kafka 代理的安全滚动重启”。
验证重启的 Kafka 代理是否有分区副本。
使用
kafka-topics.sh工具来确保代理中包含的所有副本都重新同步。具体步骤请参阅 列出和描述主题。在后续步骤中,更新您的 Kafka 代理以使用新的 inter-broker 协议版本。
一次更新每个代理。
警告完成以下步骤后,无法降级 Apache Kafka 的流。
在
/opt/kafka/config/server.properties文件中,将inter.broker.protocol.version属性设置为3.7:inter.broker.protocol.version=3.7
inter.broker.protocol.version=3.7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命令行中停止您修改的 Kafka 代理:
/opt/kafka/bin/kafka-server-stop.sh
/opt/kafka/bin/kafka-server-stop.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 Kafka 没有运行:
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启您修改的 Kafka 代理:
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 Kafka 是否正在运行:
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您要从 Kafka 3.0.0 之前的版本升级,请在
/opt/kafka/config/server.properties文件中将log.message.format.version属性设置为3.7:log.message.format.version=3.7
log.message.format.version=3.7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命令行中停止您修改的 Kafka 代理:
/opt/kafka/bin/kafka-server-stop.sh
/opt/kafka/bin/kafka-server-stop.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 Kafka 没有运行:
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启您修改的 Kafka 代理:
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 Kafka 是否正在运行:
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证重启的 Kafka 代理是否有分区副本。
使用
kafka-topics.sh工具来确保代理中包含的所有副本都重新同步。具体步骤请参阅 列出和描述主题。-
如果升级使用了它,请从
server.properties文件中删除旧的log.message.format.version配置。
升级客户端应用程序
确保所有 Kafka 客户端应用程序都更新为在升级过程中使用客户端二进制文件的新版本,并验证其与 Kafka 升级的兼容性。如果需要,与负责管理客户端应用程序的团队协调。
要检查客户端是否使用最新的消息格式,请使用 kafka.server:type=BrokerTopicMetrics,name={Produce|Fetch}MessageConversionsPerSec 指标。如果使用最新的消息格式,指标会显示 0。