之前被kafka跨IDC数据同步这个问题折腾过,后来我们的解决方法是在双方的公网防火墙上配置端口映射。但是这种方法比较费,可以尝试下下面的这种。
背景
和第三方公司进行数据集成,因为第三方服务和我们不是部署在一个数据中心,所以需要给第三方的程序开放Kafka的公网访问
问题:
Kafka 无法同时内外网访问
Kafka 默认只暴露出来一个地址放到zk中,用户请求Kafka的时候,会返回zk中的地址给客户端进行访问,就算做了公网映射也是如此,和第三方公司交互的时候,如果这个地址配置成内网地址则第三方公司不能访问,如果配置成公网地址,则内网程序消费Kafka的流量需要途经防火墙,是很不合理的实现方式
解决办法
修改Kafka server.properties 配置文件中的listeners和advertised.listeners,通知监听内网和外网地址即可,这样第三方的程序可以通过公网进行连接,自己数据中心的程序通过内网进行连接
# 设置监听地址:INTERNAL 为内网地址,EXTERNAL为外网地址,不写具体IP表示监听在所有IP地址上,和0.0.0.0类似
listeners=INTERNAL://:18092,OUTSIDE://:19092
# 设置宣告的地址,这个地址是注册到zookeeper中,返回给客户端调用的,同样INTERNAL 为内网地址,EXTERNAL为外网地址
advertised.listeners=INTERNAL://10.25.15.91:19092,OUTSIDE://{公网地址}:18092
# 设置服务的主机名字
advertised.host.name={服务器的主机名}
# 设置broker 之间通行使用的地址
inter.broker.listener.name=INTERNAL
# 安全协议的映射,PLAINTEXT 表示明文
listener.security.protocol.map=INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
转载自: http://www.fblinux.com/?p=1722