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

MSK Kafka: Please explain why there are multiple endpoints listed for ZookeeperConnectString and how I should be using them

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

aws kafka list-clusters

这个 returns 像这样:

{
    "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 命令中使用它来创建主题或生成主题时,如果我只使用其中一个端点,它的工作原理是一样的。

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

  • 这些不是代理,而是构成 Kafka 集群 zookeeper ensemble 的不同 zookeeper 服务器

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

  • 为了在客户端启动时实现高可用和容错,你应该全部使用它们,避免刚刚在配置中设置的zookeeper停止的情况(而其他人仍然 运行).

    设置所有这些保证(如果法定人数是健康的)即使一些 zookeeper 服务器不活动,你的 kafka 命令也会成功。


Zookeeper Multi Server Setup

For reliable ZooKeeper service, you should deploy ZooKeeper in a cluster known as an ensemble. As long as a majority of the ensemble are up, the service will be available. Because Zookeeper requires a majority, it is best to use an odd number of machines. For example, with four machines ZooKeeper can only handle the failure of a single machine; if two machines fail, the remaining two machines do not constitute a majority. However, with five machines ZooKeeper can handle the failure of two machines.