kafka bootstrap.servers作为具有多个IP的DNS A-Record

时间:2018-03-28 12:37:10

标签: apache-kafka spark-streaming flume high-availability resolve

我有一个拥有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解析。

2 个答案:

答案 0 :(得分:3)

掌握Apache Kafka 一书

  

bootstrap.servers是以逗号分隔的主机和端口对列表   这是" bootstrap"中的Kafka经纪人的地址。卡夫卡   Kafka客户端最初连接到的集群,用于引导自身。

     

bootstrap.servers提供充当的初始主机   Kafka客户端的起点,以发现完整的活着   集群中的服务器。由于这些服务器只是用于   初始连接以发现完整的集群成员资格(可能   动态更改),此列表不必包含完整集   服务器(但是,如果是服务器,您可能需要多个服务器)   下)。

     

客户(生产者或消费者)无论如何都使用所有服务器   在bootstrap.servers中为bootstrapping指定了哪些服务器。

因为属性bootstrap.servers提供了初始主机作为Kafka客户端发现集群中完整的活动服务器集的起点,我认为这两种方法都可以。但是,由于他们将该属性的值保持为逗号分隔列表,我猜第二种方法将是推荐的方法。并且在方法1中也是一个问题,在引导时,随机代理可能会关闭,客户端将无法继续获取群集信息。因此,如果一个代理在引导期间关闭,那么提供多个作为回退总是更好。

答案 1 :(得分:1)

Kafka 2.1包括对处理bootstrap.servers中的多个DNS资源记录的支持。

如果在客户端配置中设置client.dns.lookup="use_all_dns_ips",它将使用DNS返回的所有IP地址,而不仅仅是第一个(或随机的)。

有关更多信息,请参见KIP-235KIP-302