Skip to content

背景介绍

公司的业务部署在阿里云和华为云两个公有云上面, 中间没有打通, 服务之间的调用采用的公网IP+白名单的方式. 公司有些业务使用到了kafka, kafka部署在了阿里云上, 直接在阿里云的ECS虚拟机上安装的, 既有阿里云上的服务连接kafka, 又有华为云上的服务连接kafka, 这里总结一下kafka的配置.

解决方式

如果只是通过内网的方式访问kafka的话, 配置比较简单, 只需要配置如下即可:

listeners=PLAINTEXT://192.168.1.1:9092

因为一般阿里云的服务器都是不配置公网IP的, 最开始我想的是通过SLB做一个TCP代理即可, 让华为云上面的服务通过SLB的地址访问kafka服务, 后来测试发现行不通, 网上查了一下, 核心的问题是kafka会把地址存储到ZK, 即使通过SLB连进来, kafka也会给到一个内网的地址, 所以还需要kafka调整一下配置, 保证公网和内网同时可以使用. 核心的配置如下:

# 定义两个监听
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
# 监听配置, 注意这里定义的多个监听的IP:PORT不能重复, 比如如下的配置kafka会监听多个端口, 这个没啥问题
listeners=INTERNAL://172.17.16.91:9092,EXTERNAL://172.17.16.91:9093
# 存储到ZK供客户端调用使用
# 经过测试, 必须要给每个服务器配置公网IP, 不能使用SLB的方式
advertised.listeners=INTERNAL://172.17.16.91:9092,EXTERNAL://公网IP:9093
# broker之间调用使用的监听
inter.broker.listener.name=INTERNAL