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

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

解决方法

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

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

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

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


Zookeeper Multi Server Setup

为了获得可靠的 ZooKeeper 服务,您应该将 ZooKeeper 部署在一个 集群称为集合。 只要大多数合奏 已启动,服务将可用。因为 Zookeeper 需要一个 大多数,最好使用奇数台机器。例如, 四台机器ZooKeeper只能处理一个故障 机器;如果两台机器出现故障,剩下的两台机器不会 构成多数。然而,在五台机器上,ZooKeeper 可以 处理两台机器的故障。