Kafka跨网闸,使用映射地址无法连接
场景假设 比如你有一个 kafka 集群,在阿里云上,该集群有 2 个 broker,A 和 B。
kafka 集群:
A 内网:172.10.0.2 外网:10.0.21.1 B 内网:172.10.0.1 外网:10.0.21.2 server.properties 配置
config/server-1.properties: broker.id=1 listeners=PLAINTEXT://172.10.0.1:9092
config/server-2.properties: broker.id=2 listeners=PLAINTEXT://172.10.0.2:9092 复制 配置内网地址即可,就可以通过外网访问了(10.0.21.1:9092 和 10.0.21.2:9092 可以通,但是如果用 kafka 客户端连接会报超时) 你想通过你的电脑来访问 kafka 集群,也就想访问 10.0.21.1:9092 和 10.0.21.2:9092:
问题分析
因为 kafka 客户端是主动发现集群地址的,当你通过 11.10.21.1:9092 确实是连接到 kafka 集群了,kafka 集群返回给你的 ip 列表是你 listeners 配置的,也就是
解决 最简单的方式是客户端通过域名映射的方式。
修改 kafka 集群服务端的 server.properties 配置
config/server-1.properties: broker.id=1 listeners=PLAINTEXT://kafka-1:9092
config/server-2.properties: broker.id=2 listeners=PLAINTEXT://kafka2:9092 复制 kafka 集群的服务端,配置 hosts
cat /etc/hosts 172.10.0.1 kafka-1 172.10.0.2 kafka-2 复制 本机客户端,配置 hosts
cat /etc/hosts 11.10.21.1 kafka-1 11.10.21.2 kafka-2 复制 客户端访问 kafka 集群时,获取的是 kafka-1:9092 和 kafka-2:9092,通过客户端配置的 hosts 映射,都转成了对应的外网的 ip,因此就可以访问了。
注意:端口要一致,hosts 映射只转 ip。
如果需要修改端口
端口也映射,未实验正确性: ip 一样端口不一样就写成 172.10.0.1 kafka-1 kafka2 11.10.21.1 kafka-1 kafka-2 就好了。