社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
有个需求,需要将阿里云的kafka数据发送到某个内网环境,但是内网环境又没有一个对外的公网IP,怎么办呢?后来采用了frp内网穿透技术,使得阿里云服务器可以访问kafka,但是却发现发送了数据,内网接收不到......
1)hosts配置映射
# 配置映射
# ip为阿里云服务器的内网ip
# kafka.com 为内网环境 kafka——>advertised.listeners 配置的内网域名
10.10.10.10 kafka.com
2)frps.ini配置
[common]
bind_port = 7000
auth_token = 123456
1)host配置映射
# 配置映射
# ip为内网环境kafka的ip
# kafka.com 为内网环境 kafka——>advertised.listeners 配置的内网域名
192.168.2.105 kafka.com
2)frpc.ini配置
[common]
server_addr = 120.120.120.XXX
server_port = 7000
token = 123456
[kafka]
type = tcp
local_ip = 192.168.2.105
local_port = 1111
remote_port = 1111
3)kafka中server.properties配置
listeners=PLAINTEXT://192.168.2.105:1111
advertised.listeners=PLAINTEXT://kafka.com:1111
外网服务器:$KAFKA_HOME/bin/kafka-console-producer.sh --broker-list kafka.com:1111 --topic my_topic
advertised.listeners=PLAINTEXT://kafka.com:1111 配置的地址必须要能连通,一般配置为外网地址,因为kafka会将这个ip和port记录在zookeeper上,当外网访问时直接通过这个地址连接(如果未配置这个参数,则外网会拿到内网的IP,从而无法访问)
但是由于frp的特殊性,frp映射之后,只能外网的服务器本身能访问,因为防火墙只开放了22远程端口 ,1111并未开放 ,因此内网的kafka无法访问。所以需要配置一个内网域名 kafka.com,在内网服务器中配置映射(192.168.2.105 kafka.com), 在kafka启动的时候,会去连接 kafka.com:1111 ,正常访问。而外网服务器在zookeeper中找到 kafka.com:1111的连接地址,也需要映射 (10.10.10.10 kafka.com) , 使得外网服务器也能通过 1111端口正常访问,问题解决。
kafka端口1111必须与 frp 映射的一致。
advertised.listeners在kafka启动时,必须要能连接,所以一定要配置成域名,然后在host配置映射。当在外网访问时,拿到这个域名,并且在外网本机配置host映射,从而正确访问。
参考连接:
kafka: https://blog.csdn.net/lsr40/article/details/84135959
frp: https://blog.csdn.net/qq_23160237/article/details/90052966
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!