我有一个拥有5个经纪人的Kafka集群,我正在使用Consul Service Discovery将他们的IP放入dns记录中。
kafka.service.domain.cc A 1.1.1.1 2.2.2.2 ... 5.5.5.5
建议仅使用一个域名: kafka.bootstrap.servers = kafka.service.domain.cc:30000
或者拥有多个域名(至少2个)更好,每个域名解析为一个代理
kafka1.service.domain.cc A 1.1.1.1
kafka2.service.domain.cc A 2.2.2.2
然后在kafka中使用它们
kafka.bootstrap.servers = kafka1.service.domain.cc:30000,kafka2.service.domain.cc:30000
我对第一种方法的担忧是,域名只会被解析一次到一个随机代理,如果该代理已关闭,则不会进行新的DNS解析。
答案 0 :(得分:3)
从掌握Apache Kafka 一书
bootstrap.servers
是以逗号分隔的主机和端口对列表 这是" bootstrap"中的Kafka经纪人的地址。卡夫卡 Kafka客户端最初连接到的集群,用于引导自身。
bootstrap.servers
提供充当的初始主机 Kafka客户端的起点,以发现完整的活着 集群中的服务器。由于这些服务器只是用于 初始连接以发现完整的集群成员资格(可能 动态更改),此列表不必包含完整集 服务器(但是,如果是服务器,您可能需要多个服务器) 下)。客户(生产者或消费者)无论如何都使用所有服务器 在bootstrap.servers中为bootstrapping指定了哪些服务器。
因为属性bootstrap.servers
提供了初始主机作为Kafka客户端发现集群中完整的活动服务器集的起点,我认为这两种方法都可以。但是,由于他们将该属性的值保持为逗号分隔列表,我猜第二种方法将是推荐的方法。并且在方法1中也是一个问题,在引导时,随机代理可能会关闭,客户端将无法继续获取群集信息。因此,如果一个代理在引导期间关闭,那么提供多个作为回退总是更好。
答案 1 :(得分:1)