我有一个Kafka集群,有5个代理,我正在使用领事服务发现将他们的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条答案
按热度按时间20jt8wwn1#
kafka2.1包含了对处理多个dns资源记录的支持
bootstrap.servers
.如果你设置
client.dns.lookup="use_all_dns_ips"
在您的客户端配置中,它将使用dns返回的所有ip地址,而不仅仅是第一个(或随机的)。详见kip-235和kip-302。
vxbzzdmp2#
来自《掌握Apache·Kafka》一书:
bootstrap.servers
是一个以逗号分隔的主机和端口对列表,这些主机和端口对是kafka客户机最初连接到的“引导”kafka集群中kafka代理的地址。bootstrap.servers
提供初始主机,这些主机充当kafka客户机发现群集中全套活动服务器的起点。由于这些服务器仅用于初始连接以发现完整的集群成员身份(可能会动态更改),因此此列表不必包含完整的服务器集(不过,在服务器关闭的情况下,您可能需要多个服务器)。客户机(生产者或消费者)使用所有服务器,而不管bootstrap.servers中为引导指定了哪些服务器。
财产也是如此
bootstrap.servers
提供初始主机,作为kafka客户机发现集群中所有活动服务器的起点,我认为这两种方法都可以。但是由于他们将属性的值保持为逗号分隔的列表,我想第二种方法将是推荐的方法。在方法1中也是一个问题,在引导过程中,随机代理可能会关闭,客户端将无法继续获取集群信息。因此,如果一个代理在引导过程中发生故障,那么最好提供多个代理作为回退。