我有一个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库也是如此。Kafka卡特消费,但一段时间后开始给出错误:
% 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条答案
按热度按时间jmp7cifd1#
只需将所有三个引导服务器指定为逗号分隔的列表。如果其中一个出现故障,它只会向下一个查询元数据。