记一次内网kafka映射到外网端口遇到小问题

本文解决了一个在将Kafka部署于内网并尝试从外网消费数据时遇到的问题。通过调整主机名、监听器设置以及消费者配置,确保了内外网环境下Kafka的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司要将数据分享给第三方使用,所以要运维再内网搭建一单节点的kafka做消息中间件,kafka搭建好后,生产者生产数据正常,

将kafka的9092端口映射到外网的9092端口,但是无法消费数据,会卡住,解决方法是

1先检查主机名,主机名要与hosts文件里的一至

2再检查advertised.listeners=PLAINTEXT://shzl-mq-2:9092,这里的要填主机名,如果是仅在内网消费这里也可以写本机的IP

3然后消费者上也得写成与他一至的主机名加端口

consumer= KafkaConsumer('VideoMessage',group_id='kafka_test',bootstrap_servers=['shzl-mq-2:9092'])

注意:kafka的搭建中一下zookeeper和kafka配置文件中的主机名要保持一至,生产者和消费者代码中的主机名也要与此一致

server.1 = shzl-mq-2:2888:3888    zookeeper配置文件中的一项

kafka配置文件中的两项
advertised.listeners=PLAINTEXT://shzl-mq-2:9092
zookeeper.connect=shzl-mq-2:2181/kafka

 

<think>嗯,用户想要通过FRP在Linux环境下配置Kafka的内外网穿透。首先,我需要回顾一下FRP的基本原理,它是一个用于内网穿透的工具,通过公网服务器将内网服务暴露出去。然后,Kafka的默认配置可能只监听内网地址,所以需要调整server.properties中的监听地址,比如设置advertised.listeners为公网地址。 接下来,用户提到之前遇到外网无法访问的问题,可能涉及到防火墙或配置错误。根据引用[2],使用FRP时需要注意端口的正确映射,尤其是Kafka9092端口和Zookeeper的2181端口是否被正确转发。此外,FRP的配置文件中需要正确设置类型为tcp,并指定本地端口和远程端口。 另外,Kafka的advertised.listeners参数是关键,必须设置为FRP服务端暴露的公网地址和端口,否则客户端虽然能连接到FRP,但Kafka会返回内网地址,导致连接失败。引用[3]提到启动Kafka的命令,可能需要检查启动脚本是否正确,是否有配置文件的路径错误。 还要考虑FRP服务端和客户端的配置是否匹配,比如server_addr是否指向正确的公网服务器,对应的端口是否开放。防火墙设置方面,公网服务器的防火墙需要允许FRP的绑定端口(比如7000)和Kafka映射端口(比如9093)通过。 测试步骤中,可以先用telnet检查端口连通性,再使用kafka-console-producer.sh和consumer.sh进行实际数据收发测试。如果遇到问题,可能需要查看Kafka的日志,确认是否有连接错误或配置警告。 总结下来,配置步骤大致分为:配置Kafka的监听地址,设置FRP的客户端和服务端,确保端口映射正确,处理防火墙规则,最后进行测试和问题排查。需要特别注意Kafka的advertised.listeners和FRP的端口转发设置是否正确,这两个地方容易出错。</think>### 通过FRP实现Kafka内外网穿透的配置方案 #### 一、环境准备 1. **服务端(公网服务器)** - 安装FRP服务端(frps),需开放FRP默认端口(如`7000`)和Kafka外网映射端口(如`9093`)。 - 确保防火墙放行相关端口: ```bash sudo ufw allow 7000/tcp sudo ufw allow 9093/tcp ``` 2. **客户端(内网Kafka服务器)** - 安装FRP客户端(frpc)和Kafka服务,确保Kafka内网可正常访问。 - 修改Kafka配置(`server.properties`): ```properties listeners=PLAINTEXT://0.0.0.0:9092 advertised.listeners=PLAINTEXT://公网IP:9093 # 需与FRP映射端口一致[^2] ``` --- #### 二、FRP配置步骤 1. **服务端配置(frps.ini)** ```ini [common] bind_port = 7000 ``` 2. **客户端配置(frpc.ini)** ```ini [common] server_addr = 公网服务器IP server_port = 7000 [kafka] type = tcp local_ip = 127.0.0.1 local_port = 9092 remote_port = 9093 # 外网访问端口 ``` --- #### 三、启动与验证 1. **启动FRP服务端(公网服务器)** ```bash ./frps -c frps.ini ``` 2. **启动FRP客户端(内网服务器)** ```bash ./frpc -c frpc.ini ``` 3. **启动Kafka服务** ```bash bin/kafka-server-start.sh config/server.properties # 确保配置已生效[^3] ``` 4. **验证外网连接** ```bash # 外网服务器测试 telnet 公网IP 9093 # 应返回连通状态 # 生产消息测试 bin/kafka-console-producer.sh --topic test --bootstrap-server 公网IP:9093 ``` --- #### 四、常见问题排查 1. **连接超时** - 检查FRP服务端/客户端日志,确认端口映射是否成功。 - 确认`advertised.listeners`与FRP映射端口一致[^2]。 2. **Kafka无法启动** - 检查`server.properties`语法,如`listeners`和`advertised.listeners`格式。 - 查看Kafka日志:`tail -f logs/server.log` 3. **数据未接收** - 确保FRP客户端持续运行,无端口冲突。 - 检查内网Kafka是否正常监听9092端口:`netstat -tunlp | grep 9092` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值