如何使用haproxy平衡Kafka Boostrap?

时间:2017-07-20 13:50:46

标签: apache-kafka load-balancing haproxy high-availability

我有一个kafka群集,由3台在AWS上运行的计算机组成: kafka1到kafka3

我正在使用新款kafka消费者(> 0.8)。

我知道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

这个想法是,如果其中一个经纪人倒闭,它将从轮换中删除,并从其他任何一个获取元数据。它还允许我透明地向集群添加更多代理。

但是,这会导致我的kafka客户端出现问题。 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

我无法在线找到有关如何对Kafka引导程序进行负载均衡的信息。另一种方法是只配置一个包含多个A记录的DNS条目,但我遇到了其中一个经纪人失败的问题。

1 个答案:

答案 0 :(得分:3)

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

相关问题