首页 > 解决方案 > MSK Kafka:请解释为什么 ZookeeperConnectString 列出了多个端点以及我应该如何使用它们

问题描述

如果您运行以下 aws 命令,您将获得 msk kafka 集群详细信息:

aws kafka list-clusters

这将返回如下内容:

{
    "ClusterInfoList": [
        {
            "BrokerNodeGroupInfo": { ...},
            "ClusterArn": "arn:aws:kafka:us-west-2:000000000000000:cluster/my-cluster/{guid}",
            "ClusterName": "my-cluster",
            "ZookeeperConnectString": "z-1.my-cluster.xyz.c5.kafka.us-west-2.amazonaws.com:2181,z-3.my-cluster.xyz.c5.kafka.us-west-2.amazonaws.com,z-3.my-cluster.xyz.c5.kafka.us-west-2.amazonaws.com"
        }
    ]
}

请注意 ZookeperConnectString 是如何以逗号分隔的字符串...

它真的是 zookeeper(我认为 zookeeper 的全部目的是用一个端点协调代理)还是代理列表?这就是我的怀疑。此外,当我在-zoookeeper命令中使用它来创建主题或生成主题时,如果我只使用其中一个端点,它的工作原理是一样的。

我可以在我的应用程序中只使用一个端点吗?或者我应该在我的生产者配置中使用所有三个。如果是这样,为什么?只使用其中一种会有什么影响?

标签: apache-kafkaapache-zookeeperaws-msk

解决方案


  • 这些不是代理,而是为您的 Kafka 集群构成Zookeeper 集合的不同Zookeeper 服务器。

  • 您可以只使用其中一个,但这意味着必须运行特定的 zookeeper 才能使命令成功。

  • 您应该使用所有这些以在客户端启动时实现高可用性和容错,避免您刚刚在配置中设置的 zookeeper 停止(而其他人仍在运行)的情况。

    设置所有这些保证(如果仲裁是健康的)即使某些 zookeeper 服务器不活动,您的 kafka 命令也会成功。


Zookeeper 多服务器设置

为了获得可靠的 ZooKeeper 服务,您应该将 ZooKeeper 部署在称为 ensemble 的集群中。只要大多数合奏都启动了,该服务就可以使用。因为 Zookeeper 需要多数,所以最好使用奇数台机器。例如,有四台机器的 ZooKeeper 只能处理单台机器的故障;如果两台机器发生故障,剩下的两台机器不构成多数。但是,使用五台机器 ZooKeeper 可以处理两台机器的故障。


推荐阅读