2016-07-29 187 views
4

我有一个关于AWS上的Kafka代理集群的问题。现在有一个AWS ELB坐在集群前面,但是当我将生产者或消费者的“bootstrap.servers”属性设置为我的ELB的“A”记录(和正确的端口号)时,生产者和消费者不能分别产生和使用消息。我已经关闭了我的经纪人的所有SSL,并通过PLAINTEXT 9092端口连接,我的ELB将端口1234转发到9092.因此,在我的Producer Configs属性中,例如,我将拥有...卡夫卡是否支持经纪集群前的ELB?

bootstrap.servers =( “A” ELB的记录):1234

更多信息:

  • 我ELB的协议是TCP/TCP
  • 我的经纪人 “advertised.listeners” 属性是PLAINTEXT://(EC2 -private-ip):9092

有没有人在ELB后面跑过卡夫卡?如果是这样,请帮助我!

回答

5

您可以使用ELB作为bootstrap.servers,但代理仍然需要客户端直接访问。 ELB将用于客户端初始元数据请求,以确定哪些主题分区位于哪个代理上,但在此之后它将使用服务器的主机名(或者如果需要对其进行自定义,则使用advertised.listeners设置,例如EC2实例可能需要获取服务器的公共IP)。

+0

我还是有点困惑。 ELB不通过专用IP与其实例通话,所以我不希望advertised.listeners成为私有IP?我已经尝试了ec2s的公共和私人IP地址,但它们都无法工作。顺便说一句,我正在使用Java的kafka客户端库。 – Mattnv92

+0

运行Kafka的EC2实例可以在单个接口上侦听,但能够接受针对公共和私有IP的流量。我试图得到的是,ELB仅*用于获取关于集群的元数据的初始请求。之后,客户端需要能够直接与每个主题分区的领导代理交谈。如果您试图使用ELB将卡夫卡群集公开为可用,您需要确保每个代理的'advertised.listeners'也可以公开访问。 –

+1

我觉得很愚蠢。所以它实际上是在工作,但ELB报告说实例“无法使用”,因为健康检查失败。它在默认情况下指向80端口,它不是“可以ping通”的。所以ELB并没有将流量路由到任何经纪人。我们有ELB现在在我们的经纪人上ping了Zookeeper端口,它工作得很好!知道它必须是愚蠢的:p。谢谢您的帮助!它肯定揭示了卡夫卡的工作原理,并且我相信在将来会帮助其他人! – Mattnv92

1

恕我直言,建议不要向kafka集群添加额外的SLB。

  • 卡夫卡集群本质上是分散的,SLB增加单点故障风险并使集群设置复杂化。
  • 消息收发是网络滞后敏感,SLB会明显降低消息吞吐量。