如何使用haproxy来平衡Kafka Boostrap?

问题描述:

我有由3台机器上运行AWS的卡夫卡集群: kafka1如何使用haproxy来平衡Kafka Boostrap?

我使用了新样式卡夫卡消费者(> 0.8),以kafka3。

我知道kafka客户端连接到其中一个kafka服务器,获取服务器元数据,然后直接连接到代理。

我想确保在代理失败的情况下,客户端仍然能够获取元数据。

为此,我有以下配置的HAProxy的负载平衡器:

listen kafka 
     bind *:9092 
     mode tcp 
     balance roundrobin 
     no option clitcpka 
     option forceclose 
     timeout check 5s 
     server kafka1 kafka1.example.com:9092 check inter 3s fastinter 1s 
     server kafka2 kafka2.example.com:9092 check inter 3s fastinter 1s 
     server kafka3 kafka3.example.com:9092 check inter 3s fastinter 1s 

的想法是,如果经纪人的一个出现故障是由旋转移出和元数据从别人的一把拽住。它还允许我透明地将更多代理添加到集群。

但是,这导致我的卡夫卡客户端出现问题。 PipelineDB直接拒绝从主题中消费,用于Python的融合kafka库也是如此。 Kafkacat消耗,但经过一段时间后,开始给错误:

% ERROR: Local: Broker transport failure: kafka.example.com:9092/bootstrap: Receive failed: Disconnected 
% ERROR: Local: Broker transport failure: kafka.example.com:9092/bootstrap: Connection closed 

我无法找到任何信息网上有关如何加载平衡卡夫卡引导程序。另一种方法是只配置一个DNS条目与多个A记录,但我遇到了其中一家经纪商倒闭的问题。

只需将所有三个引导程序服务器指定为逗号分隔列表即可。然后,如果发生故障,它只会查询下一个元数据。

+0

如果我想在不更改应用程序配置的情况下添加第4个,该怎么办? –

+0

您不需要列出引导服务器列表中的每个代理。它只是一小部分节点的简短列表,以便您的客户端可以查询其中的一个以获取整个群集的元数据。您的客户端仍然可以发现并连接到群集中的所有其他节点 –