网站首页 > 技术教程 正文
场景假设
比如你有一个kafka集群,在同一个vpc(私有网络)里面也即是在一个内网环境里,该kafka集群有3个broker,broker1、broker2和broker3。
kafka集群信息如下:
- broker1 IP: 192.168.xxx.1
- broker2 IP: 192.168.xxx.2
- broker3 IP: 192.168.xxx.3
kafka集群各个节点 server.properties配置
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://192.168.xxx.1:19092
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://192.168.xxx.2:19092
config/server-3.properties:
broker.id=3
listeners=PLAINTEXT://192.168.xxx.3:19092
- 现在希望通过配置vpc公网ip做端口转发(也可以通过nginx做端口转发),就可以通过外网访问了(但是实际用kafka客户端连接会报超时)
想通过vpc外的机器来访问kafka集群,也就想访问192.168.xxx.1:19092,192.168.xxx.2:19092,192.168.xxx.3:19092
在vpc上做端口转发,vpc公网ip为192.168.xxx.xx,并在相应防火墙打开对应端口(19092、19093、19093),比如:
192.168.xxx.xx:19092 -> 192.168.xxx.1:19092
192.168.xxx.xx:19093 -> 192.168.xxx.2:19092
192.168.xxx.xx:19094 -> 192.168.xxx.2:19092
测试
这时,如果你通过vpc的公网ip和对应端口连接私有网络(内网)内的kafka集群,192.168.xxx.xx:19092、192.168.xxx.xx:19093、192.168.xxx.xx:19094端口都是通的,但是访问kafka发送或消费消息时,会报网络超时,这是为什么呢?
kafka producer端(客户端)和server之间有个类似协商的阶段, server会把lkafka配置文件里listeners这里的地址直接返给producer,producer再发数据给这个listeners地址。
因为kafka客户端是主动发现集群地址的,当你通过192.168.xxx.xx:19092、192.168.xxx.xx:19093、192.168.xxx.xx:19094确实是连接到kafka集群了,kafka集群返回给你的ip列表是你listeners配置的,也就是
192.168.xxx.1:19092
192.168.xxx.2:19092
192.168.xxx.3:19092
客户端producer 在vpc这个私有网络以外,producer 端通过ip转发和端口都没有用,producer 和vpc对应的公网ip是通的,但是与vpc内私有网络不通,这就是访问kafka发送或消费消息时会报网络超时等等的本质原因。
解决
一种解决方式是客户端通过域名映射的方式。
1.kafka配置:
修改kafka集群服务端各个节点的server.properties配置,注意listeners之后的ip和端口配置
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://kafka-1:19092
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://kafka-2:19093
config/server-3.properties:
broker.id=3
listeners=PLAINTEXT://kafka-3:19094
kafka集群的各个节点在服务端配置hosts
cat /etc/hosts
192.168.xxx.1 kafka-1
192.168.xxx.2 kafka-2
192.168.xxx.3 kafka-3
2.vpc做端口映射
kafka-1 映射至 192.168.xxx.1:19092
kafka-2 映射至 192.168.xxx.2:19093
kafka-3 映射至 192.168.xxx.3:19094
3.客户端配置:
客户端在host文件中把kafka01、kafka02、kafka03都映射到公网地址。这个很关键,上面提到过客户端会获取到kafka配置的元数据 ,客户端会获取到 kafka-1、kafka-2、kafka-3 这3个hostname,之后生产或消费数据会直接通过这个地址访问。如果不把这三个hostname重新映射到公网IP,就不能成功生产或者消费数据。
#/etc/hosts
192.168.xxx.xx kafka01 kafka02 kafka03
客户端访问kafka集群时,获取的是kafka-1:19092,kafka-2:19093,kafka-3:19094,通过客户端配置的hosts映射,都转成了对应的外网的ip,因此就可以访问了。
注意:端口要一致,hosts映射只转ip。
猜你喜欢
- 2024-10-11 KUBERNETES的六种端口(kubernetes hostport)
- 2024-10-11 漫画:Apache Nginx80 端口争夺战(apache服务器的默认端口是)
- 2024-10-11 Nginx处理redirect 端口丢失的问题
- 2024-10-11 Knative Service 是如何指定端口和协议的
- 2024-10-11 kubernetes nginx ingress 部署开放不同端口应用
- 2024-09-21 kubectl常用命令(二)(kubectl 命令)
- 2024-09-21 Nginx服务器-抓包分析反向代理跳转地址
- 2024-09-21 SpringCloud微服务笔记-Nginx实现网关反向代理
- 2024-09-21 Linux查看被占用的端口(linux 查看端口占用被哪个进程占用)
- 2024-09-21 nginx怎么配置默认端口(nginx怎么配置默认端口命令)
你 发表评论:
欢迎- 最近发表
-
- Linux新手必看:几种方法帮你查看CPU核心数量
- linux基础命令之lscpu命令(linux中ls命令的用法)
- Linux lscpu 命令使用详解(linux常用ls命令)
- 如何查询 Linux 中 CPU 的数量?这几个命令要知道!
- 在linux上怎么查看cpu信息(linux如何查看cpu信息)
- 查看 CPU 的命令和磁盘 IO 的命令
- 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- Linux 网络命令知多少(linux 网络 命令)
- Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)