Apache Kafka + 如何使用 Kraft 模式叛逃 Kafka 集群或使用 Zookeeper 模式叛逃 Kafka

问题描述 投票:0回答:1

我们有数十个不同的 Kafka 集群实验室

部分是Kraft模式,大部分是带有zookeeper的普通Kafka集群

因为我们在所有 Kafka 集群上运行基于

python/perl/bash
的冒烟测试脚本

然后我们要确定 Kafka 正在运行哪种模式 - Kraft 或不是 Kraft

我将在这里分享一些选项,但我必须说,我测试过的所有选项仍然没有说服力,我们希望找到更好的选项

第一个选项,是使用 Kafka PID 作为

ps -ef | grep ` netstat -tulpn | grep "9092" | awk '{print $NF}' | sed s'/\// /g' | awk '{print $1}' ` | grep -v grep | grep -i kraft

这给出了 PID 内容,但如果二进制文件夹不包含名称

Kraft
那么,我们不会过滤字符串 - Kraft

第二个选项是使用 Kafka cli -

kafka-metadata-quorum.sh

bash kafka-metadata-quorum.sh  --bootstrap-server `hostname`:9092 describe --status
ClusterId:              uuZQoN9-TGmVU3lKDFCtww
LeaderId:               2001
LeaderEpoch:            975
HighWatermark:          224514
MaxFollowerLag:         0
MaxFollowerLagTimeMs:   0
CurrentVoters:          [2001,2002,2003]
CurrentObservers:       [1010,1001,1002,1003]

在 Kraft 模式下我们应该得到上述详细信息,在 Zookeeper 模式下我们得到以下信息

kafka-metadata-quorum.sh  --bootstrap-server `hostname`:9092 describe --status
org.apache.kafka.common.errors.UnsupportedVersionException: The broker does not support DESCRIBE_QUORUM
java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.UnsupportedVersionException: The broker does not support DESCRIBE_QUORUM
        at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
        at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1908)
        at org.apache.kafka.common.internals.KafkaFutureImpl.get(KafkaFutureImpl.java:165)
        at org.apache.kafka.tools.MetadataQuorumCommand.handleDescribeStatus(MetadataQuorumCommand.java:208)
        at org.apache.kafka.tools.MetadataQuorumCommand.execute(MetadataQuorumCommand.java:108)
        at org.apache.kafka.tools.MetadataQuorumCommand.mainNoExit(MetadataQuorumCommand.java:61)
        at org.apache.kafka.tools.MetadataQuorumCommand.main(MetadataQuorumCommand.java:56)
Caused by: org.apache.kafka.common.errors.UnsupportedVersionException: The broker does not support DESCRIBE_QUORUM

我还考虑了在

/var/lib/kafka/kraft
下创建标志作为文件的选项,

但我不喜欢这个,因为文件可以被用户删除

最后一个选项是缺陷控制器PID(进程ID),所以如果它正在运行,那么我们可以说Kafka是Kraft模式,但实际上这个选项不太好,因为它与组合模式相关(当代理和控制器在同一主机上运行时)并且当控制器在专用主机上分离时,不支持分离的集群,并且如果控制器由于某种原因关闭,那么它是一个问题

linux apache-kafka apache-zookeeper
1个回答
0
投票

从集群本身来看,最好的选择是解析

server.properties
文件以了解 Kraft 模式是否存在
quorum.voters
或缺少
zookeeper.connect

否则,

kafka-metadata-quorum.sh
也应该有效,因为非卡夫经纪人不应对此做出回应。

© www.soinside.com 2019 - 2024. All rights reserved.