Kafka外网访问

文章目录

一、背景

kafka机器只有内网IP,没有绑定外网网卡,但是可以在防火墙或通过其他有公网IP的设备上进行公网IP+端口的映射。

二、需求

kafka集群端口映射后,可以通过外网IP+端口进行数据生产和消费。一帮情况下,只配置9092端口,即使映射到公网,外部也无法访问,因为kafka需要修改其他配置,开启外部访问端口。

三、调研

一般情况下,kafka的listeners参数配置为127.0.0.1或本地IP地址,只能本地访问,无法通过外部网络访问。且如果在防火墙上进行外网端口映射,就会出现如下报错:

复制代码
$ ./kafka-console-producer.sh --broker-list 公网IP:39092 --topic test1-topic
>hello
[2023-06-26 15:03:19,708] ERROR Error when sending message to topic test1-topic with key: null, value: 5 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Topic test1-topic not present in metadata after 60000 ms.


$ ./kafka-console-consumer.sh --bootstrap-server 公网IP:39092 --topic test1-topic --from-beginning
[2023-06-26 15:04:25,078] WARN [Consumer clientId=consumer-console-consumer-58924-1, groupId=console-consumer-58924] Connection to node 2147483429 (/192.168.0.218:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

就算配置了公网映射,默认情况下,生产、消费数据还是会和机器的本地IP进行通信,不会通过公网IP进行通信。

四、配置内外网访问

  1. 停止kafka、zk
  2. 修改kafka配置文件

(单机版)

复制代码
$ vim /data/kafka/config/server.properties
listeners=INTERNAL://192.168.0.217:9092,EXTERNAL://192.168.0.217:29092 
advertised.listeners=INTERNAL://192.168.0.217:9092,EXTERNAL://公网IP:29092
inter.broker.listener.name=INTERNAL
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT




# 详解
# 定义内部、外部两个监听器,其中EXTERNAL是内部和外部网络之间的映射,在外网IP没有绑定到网卡的情况下,如果绑定到主机网卡,这里就必须填写外网IP
listeners=INTERNAL://192.168.0.217:9092,EXTERNAL://192.168.0.217:29092 
# 定义kafka集群向外界公开的监听地址,其中EXTERNAL是外部网络直接访问的kafka集群地址
advertised.listeners=INTERNAL://192.168.0.217:9092,EXTERNAL://公网IP:29092
# 定义kafka brokers之间使用INTERNAL监听器进行通信
inter.broker.listener.name=INTERNAL
# 定义INTERNAL、EXTERNAL监听器都使用明文协议进行通信
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT

(集群版)

复制代码
# 注意:
1. 集群配置内外网访问,公网的端口需要配置不同的端口,否则会冲突
2. 一台配置重启后,接着配置重启下一台


# 节点1
listeners=INTERNAL://192.168.0.217:9092,EXTERNAL://192.168.0.217:19092 
advertised.listeners=INTERNAL://192.168.0.217:9092,EXTERNAL://公网IP:19092
inter.broker.listener.name=INTERNAL
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT

# 节点2
listeners=INTERNAL://192.168.0.218:9092,EXTERNAL://192.168.0.218:19093 
advertised.listeners=INTERNAL://192.168.0.218:9092,EXTERNAL://公网IP:19093
inter.broker.listener.name=INTERNAL
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT

# 节点3
listeners=INTERNAL://192.168.0.219:9092,EXTERNAL://192.168.0.219:19094 
advertised.listeners=INTERNAL://192.168.0.219:9092,EXTERNAL://公网IP:19094
inter.broker.listener.name=INTERNAL
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
  1. 启动zk、kafka
  2. 验证

通过公网ip+端口的方式,向测试topic中写入数据、消费数据

复制代码
$ ./kafka-console-producer.sh --bootstrap-server 公网IP:29092 --topic test1-topic
$ ./kafka-console-consumer.sh --bootstrap-server 公网IP:29092 --topic test1-topic --from-beginning
相关推荐
&&月弥7 小时前
三大开源消息队列(Kafka、RabbitMQ、RocketMQ)使用教程
kafka·开源·rabbitmq
百锦再17 小时前
Java 并发编程进阶,从线程池、锁、AQS 到并发容器与性能调优全解析
java·开发语言·jvm·spring·kafka·tomcat·maven
我真会写代码21 小时前
从入门到精通:Kafka核心原理与实战避坑指南
分布式·缓存·kafka
一叶飘零_sweeeet1 天前
击穿 Kafka 高可用核心:分区副本、ISR 机制与底层原理全链路拆解
分布式·架构·kafka
indexsunny2 天前
互联网大厂Java面试实战:从Spring Boot到微服务架构的深度解析
java·spring boot·spring cloud·kafka·prometheus·security·microservices
睡醒的土豆2 天前
解决 Kafka 管理工具中文乱码问题
分布式·kafka
殷紫川2 天前
击穿 Kafka 高可用核心:分区副本、ISR 机制与底层原理全链路拆解
架构·kafka
岁岁种桃花儿2 天前
Flink从入门到上天系列第二十五篇:Flink和Kafka连接时的精准一次性
大数据·flink·kafka
七夜zippoe2 天前
消息队列选型:Kafka vs RabbitMQ vs Redis 深度对比
redis·python·kafka·消息队列·rabbitmq