一、原因描述
安装好Kafka(服务端ip为192.168.116.128
(本地虚拟机)
),在Linux服务器上使用
kafka-console-consumer和
kafka-console-producer
,进行生产者和消费者测试,能进行正常的接发消息。但是通过远程客户端的作为生产者,无法与kafka服务端建立连接。
二、问题排查
1、排查是不是服务器的防火墙原因,导致服务器的9092端口不能被window连接上,在window上执行telnet 192.168.116.128 9092,发现端口是可以被连通的,排除了这个原因。
2、Kafka更改配置文件才能实现被远程访问
打开config/server.properties配置文件,更改如下
把36行的注释去掉,把advertised.listeners值改为
PLAINTEXT://host_ip:9092
(我的服务器ip是192.168.116.128)
如果没有配置内部的IP地址,默认地址为java.net.InetAddress.getCanonicalHostName(),在存在多个网卡的情况可能不能找到正确的IP地址,建议手动
配置host.name的值
listeners配置用于内网通信
listeners=<协议名称>://<内网ip>:<端口>
advertise.listeners配置暴露出去的listener
三、
在云服务器中搭建kafka
在云服务器中搭建kafka集群配置,直接配置 host.name 配置和 port 配置
#本地IPhost.name=${IP}port=9091#公网IPadvertised.host.name=${IP}