如何更改Kafka broker列表IP

7
我有3个运行在隔离网络区域的Kafka Broker,我的客户端无法直接连接它们,因此我必须使用虚拟IP(VIP)来连接Broker。
例如:
我的Broker IP为:10.5.1.5、10.5.1.6和10.5.1.7,
我的VIP IP为:200.100.1.5、200.100.1.6和200.100.1.7,它们是一对一匹配的。
因此,当我将引导列表指定为200.100.1.5时,集群会响应混合的VIP和Broker IP,如10.5.1.5、10.5.1.6、200.100.1.5、200.100.1.6等,然后连接失败,因为我的程序无法访问Broker IP,只能访问VIP。
我的当前配置如下,它同时响应IP和VIP:
listeners=INTERNAL://:9092,EXTERNAL_PLAINTEXT://:8080

advertised.listeners=EXTERNAL_PLAINTEXT://200.100.1.5:8080,INTERNAL://10.5.1.5:9092

listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT

inter.broker.listener.name=INTERNAL

如何让Kafka只响应VIP列表?
我找到了答案,可能是以下内容:
advertised.listeners=PLAINTEXT://200.100.1.5:8080
listeners=PLAINTEXT://10.5.1.5:9092
And remove the listener.security and inter.broker.

你的虚拟IP是在托管Kafka的节点内部实现的,还是通过一些外部代理/路由器实现的?也就是说,你的第一个Kafka节点是否知道它的IP地址是200.100.1.5? - CantankerousBullMoose
1个回答

6
您可以使用名为advertised.listeners的代理设置,告诉您的代理在响应客户端时包含不同的IP地址/主机名。 advertised.listeners:
如果与listeners配置属性不同,则要发布到ZooKeeper供客户端使用的侦听器。在IaaS环境中,这可能需要与代理绑定的接口不同。如果没有设置此项,则将使用listeners的值。与listeners不同,不能广告0.0.0.0元地址。
例如,在第一个代理中,您可以使用以下设置:
advertised.listeners=PLAINTEXT://200.100.1.5:9092
listeners=PLAINTEXT://10.5.1.5:9092

更改生产者代码是一个非常糟糕的想法。如果你这样做,只有你的黑客客户端才能连接到你的集群。我列出的代理设置就是为此而设立的。 - Mickael Maison
如果您看到异常,请在此处粘贴。我发布的代码片段只是一个示例,这两个设置的确切值取决于您的配置,但使用它们,您可以实现您所要求的功能。请花时间阅读“advertised.listeners”和“listeners”的文档,并了解它们的工作原理。 - Mickael Maison
您的问题仍不清楚。您说您的客户端连接良好,但是连接到哪个侦听器 EXTERNAL_PLAINTEXTINTERNAL?我猜想您希望客户端在使用 EXTERNAL_PLAINTEXT 的 8080 端口进行连接,并且只有 INTERNAL 的 9092 端口之间会有经纪人流量。您能够确保您的客户端确实连接到了 8080 端口吗? - Mickael Maison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接