kafka配置内外网分流
问题描述:
kafka服务处在内网, 客户端在外网, 客户端通过网闸端口映射连接内网的kafka, 这种情况下实际无法连接上kafka。
客户端第一次通过外网ip端口连接上kafka,会查询broker信息,kafka会返回内网的ip信息, 这样客户端在第二次重新连接broker时就会连接失败。
修复方法1:域名解析,例如客户端和服务端都域名kafka_1, 服务端kafka_1对应内网ip, 客户端kafka_1对应外网ip, kafka配置listeners=PLAINTEXT://kafka_1:9092
修复方法2:kafka配置内外网分流
骤修改kakfa配置文件config/server.properties
1、 修改listeners,这里配置本机kafka的监听地址
listeners=INSIDE://内网ip:9091,OUTSIDE://外网ip:9092
修改前 |
listeners= PLAINTEXT://10.12.56.22:9092 |
修改后 |
listeners= INSIDE://10.12.56.22:9091, OUTSIDE://163.177.247.244:9092 |
2、修改advertised.listeners, 这里的配置是用于告知其他broker和客户端本机的监听地址,
advertised.listeners和listeners保持一致。
advertised.listeners=INSIDE://内网ip:9091,OUTSIDE://外网ip:9092
修改前 |
advertised.listeners = PLAINTEXT://10.12.56.22:9092 |
修改后 |
advertised.listeners= INSIDE://10.12.56.22:9091, OUTSIDE://163.177.247.244:9092 |
3、新增listener.security.protocol.map,这是监听器名称和安全协议之间的映射关系集合,PLAINTEXT表示明文。
修改后 |
listener.security.protocol.map=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT |
4、新增inter.broker.listener.name配置,注释掉security.inter.broker.protocol配置,二者不能同时配置。inter.broker.listener.name用于broker之间通信的listener名称。
修改前 |
security.inter.broker.protocol=PLAINTEXT |
修改后 |
#security.inter.broker.protocol=PLAINTEXT inter.broker.listener.name=INSIDE |