kafka bootstrap.servers作为具有多个IP的DNS A记录

Elt*_*ooo 1 high-availability resolve flume apache-kafka spark-streaming

我有一个由5个经纪人组成的Kafka集群,并且我正在使用Consul Service Discovery将其IP放入dns记录中。

kafka.service.domain.cc A 1.1.1.1 2.2.2.2 ... 5.5.5.5
Run Code Online (Sandbox Code Playgroud)

是否建议仅使用一个域名: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
Run Code Online (Sandbox Code Playgroud)

然后在kafka中使用它们

kafka.bootstrap.servers = kafka1.service.domain.cc:30000,kafka2.service.domain.cc:30000
Run Code Online (Sandbox Code Playgroud)

我对第一种方法的担心是,域名将仅被随机代理解析一次,如果该代理关闭,则不会进行新的DNS解析。

小智 6

Kafka 2.1 支持处理bootstrap.servers.

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

有关详细信息,请参阅KIP-235KIP-302 。


Mon*_*mul 5

精通Apache Kafka的书中:

bootstrap.servers 是主机和端口对的逗号分隔列表,它们是“引导” Kafka群集中的Kafka代理的地址,Kafka客户端最初连接到该地址以进行自我引导。

bootstrap.servers提供初始主机,这些初始主机充当Kafka客户端发现集群中全套活动服务器的起点。由于这些服务器仅用于初始连接以发现完整的群集成员身份(它可能会动态更改),因此此列表不必包含完整的服务器集(不过,如果服务器是一台,则可能需要多个服务器)。下)。

客户端(生产者或消费者)使用所有服务器,而与bootstrap.servers中指定用于引导的服务器无关。

因此,由于该属性bootstrap.servers提供了初始主机,这些主机充当Kafka客户端发现集群中全套活动服务器的起点,因此我认为两种方法都可以。但是因为他们将属性的值保留为逗号分隔的列表,所以我认为第二种方法将是推荐的方法。而且方法1中的一个问题是,在引导过程中,随机代理可能会关闭,并且客户端将无法继续获取群集信息。因此,如果一个代理在引导过程中关闭,则最好提供多个作为后备。