当前位置: 首页 > news >正文

kafka配置外网访问

提纲
1、问题
2、原因分析
3、解决方案



1、问题



处于VPC网络中一个3节点的kafka集群,在vpc网络之外无法访问。即使给kafka集群中的一个节点映射了一个公网ip和端口,也是无法访问的。

具体问题见下图:

如下上图所示,在公司自建数据中心的vpc网络中有3个节点组成的一个kafka集群,分别是:
10.70.14.164:9092
10.70.14.165:9092
10.70.14.166:9092

vpc网络内部有一个跳板机,跳板机的vpc网络ip:10.70.14.174,跳板机上绑定了一个公网的ip:36.110.106.136。

这个集群可以被vpc网络内部的其他节点,比如跳板机这个节点,访问到,因为跳板机本身也是在vpc网络中的,但是不能被处于公司局域网的开发者和处于公网的开发者访问到,因为公司局域网和vpc网络是不同的两个网络,而公网又和公司局域网是隔离的。

那么如何才能让以上两类开发者顺利访问kafka集群呢?



2、原因分析

一般情况下开发者要访问kafka集群,就必须在自己的程序中配置kafka集群的至少一台机器的ip和kafka端口,在本例中ip:10.70.14.164,port:9092。

但是由于公司局域网和vpc网络不在一个网段中,所以,连处于公司局域网内部的开发者在配置了以上的ip和port后,都无法访问到kafka集群,更不要说处于公网的开发者访问了。

针对这种情况,我们首先想到了一个简单的处理方案,具体方案如下:

因为跳板机是有公网ip的,所以给跳板机做个端口映射,将跳板机的9092端口映射到10.70.14.164:9092,也就是36.110.106.136:9092->10.70.14.164:9092。这样其他开发者在自己的程序中配置kafka ip和port时,就配置成36.110.106.136:9092,这样当开发者访问36.110.106.136:9092时,实际上就相当于在访问10.70.14.164:9092,这不就是访问kafka集群了么?

可以不幸的是,这种方案表面上看似合理可行,实践中确实行不通的,为什么呢?

原来呀,kafka集群在客户端第一次访问它的时候,会把整个集群的信息都发给客户端,然后让客户端再访问整个集群。比如客户端配置了36.110.106.136:9092,当他访问的时候,因为36.110.106.136:9092和10.70.14.164:9092做了映射,所以,它会连到10.70.14.164:9092上,这时10.70.14.164:9092会把整个kafka集群中每个节点的server.conf中的listener字段的值发给客户端,也就是10.70.14.164:9092,10.70.14.165:9092,10.70.14.166:9092,发给客户端,最后客户端才能用整个集群的信息访问kafka集群。

但是,在本例中,当客户端从10.70.14.164:9092处收到了10.70.14.164:9092,10.70.14.165:9092,10.70.14.166:9092后,它用10.70.14.164:9092,10.70.14.165:9092,10.70.14.166:9092访问kafka集群,这时完全访问不通,因为从客户端的网络中找不到10.70.14.164,10.70.14.165,10.70.14.166这三个,因为它们三个ip是vpc内网的ip,非vpc ip是访问不到的。



3、解决方案

针对以上的情况,我们可以通过dns做域名和ip的转换来解决,具体方案如下。



第一步:给10.70.14.164,10.70.14.165,10.70.14.166三者每个都设置一个域名:
10.70.14.164 - thq-08
10.70.14.165 - thq-09
10.70.14.166 - thq-10



第二步:在每个节点的kafka的配置文件config/server.properties中的listener中配置如下,注意各个kafka的端口变了,不再是默认的9092.

10.70.14.164 - thq-08
listeners=PLAINTEXT://THQ-08:9092


10.70.14.165 - thq-09
listeners=PLAINTEXT://THQ-09:9093


10.70.14.166 - thq-10
listeners=PLAINTEXT://THQ-09:9094



第三步:在跳板机上做端口映射。
36.110.106.136:9092 -> 10.70.14.164:9092
36.110.106.136:9093 -> 10.70.14.165:9093
36.110.106.136:9094 -> 10.70.14.166:9094



第四步:在客户端的机器上做如下配置:
36.110.106.136 thq-08 thq-09 thq-10



第四步:客户端访问kafka集群
客户端配置:36.110.106.136:9092。


这样当客户端访问集群的时候,会收到THQ-08:9092,THQ-09:9093,THQ-10:9094,实际访问的时候做dns的域名到ip的映射,这样THQ-08:9092,THQ-09:9093,THQ-10:9094会被dns处理成:36.110.106.136:9092,36.110.106.136:9093,36.110.106.136:9094。


然后通过36.110.106.136:9092,36.110.106.136:9093,36.110.106.136:9094访问的时候,请求会到跳板机,由于跳板机上已经做了端口映射了,所以实际会访问到10.70.14.164:9092,10.70.14.165:9093,10.70.14.166:9094,这就是实际的kafka集群了。


这样也就解决了访问kafka的问题了。




参考文献:
1、https://www.luyouqi.com/shezhi/4703.html

相关文章:

  • java每一练(3)
  • Java学习----前端4
  • ABAP中 delete 语句的使用
  • cesium火箭发射,模型控制,模型动画,模型移动
  • http请求走私漏洞原理,利用,检测,防护
  • Docker学习(3)—— 将容器转化为新的镜像,并将新镜像发布到阿里云公共仓库或私有仓库
  • cpu天梯图2022年11月 cpu排行榜天梯图2022
  • Linux的基本协议与他的堂兄堂弟
  • FEDformer 代码分析(2)
  • UCloud 对象存储使用
  • web前端-javascript-逻辑运算符(! 非取反,短路的 与,短路的|| 或, || 非布尔值的情况,对于非布尔值进行与或运算时,会先将其转换为布尔值,然后再运算,并且返回)
  • 油藏生产业务+机器学习代理优化算法
  • http请求报头header
  • Java Spring后处理器
  • 为什么国外程序员的创造力比中国程序员强?
  • linux进阶55——service文件
  • 外贸线上推广引流的技巧
  • c++ 友元函数
  • 一起Talk Android吧(第四百二十三回:给图片添加阴影)
  • m基于光纤光栅传感网接入GPON的光纤通信系统matlab性能仿真,包括解码,解封装,分接,码率恢复,解帧,拆包,译码
  • Jupyter使用详解
  • JavaEE day6 初识JavaScript
  • 学生护眼灯怎么选择?分享适合学生的护眼灯
  • 随笔集1.24
  • Linux C编程一站式学习笔记6
  • 每日学术速递1.26