当前位置:首页 > 技术文章 > 正文内容

将kafka集群端口映射到公网访问(kafka端口映射外网怎么配置)

arlanguage3个月前 (02-01)技术文章27

场景假设

比如你有一个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。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/2021.html

分享给朋友:

“将kafka集群端口映射到公网访问(kafka端口映射外网怎么配置)” 的相关文章

Nginx配置最全详解(万字图文总结)

[TOC]Nginx 也是我们比较常见的“玩具”了,不过有的小伙伴对 Nginx 配置不熟悉,每次使用的时候都要搜索,松哥在本文中给出一些常见的配置案例,小伙伴们可以收藏备用。一 什么是 NginxNginx(发音为“Engine-X”)是一个开源的高性能 HTTP 和反向代理服务器,同时也是一个...

只想简单操作 Kubernetes 资源?用 Go 一招搞定,快试试 kom!

当你在使用代码操作k8s时,有没有觉得总要写很多代码,才能获取到一个资源,并且要处理底层的集群连接、client等一系列的东西。那么有没有一种简单的办法,毕竟我只是想读取一下集群内的Pod或者什么其他资源而已啊。为了解决这个问题,我们使用 kom https://github.com/weibaoh...

Linux服务器Centos7系统Nginx安装与配置

一 安装编译工具及库文件yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel二首先要安装 PCREPCRE 作用是让 Nginx 支持 Rewrite 功能。2.1 下载 PCRE 安装包cd /usr/...

利用Nginx正向代理实现局域网电脑访问外网

引言在网络环境中,有时候我们需要让局域网内的电脑访问外网,但是由于网络策略或其他原因,直接访问外网是不可行的。这时候,可以借助 Nginx 来搭建一个正向代理服务器,实现局域网内电脑通过 Nginx 转发访问外网的需求。在工作中我遇到了一个类似的情况:在公司网络中,由于管理要求,局域网内的电脑不能直...

如何在 NGINX 中创建自定义 404 错误页面

每次NGINX在尝试处理客户端请求时遇到错误,它都会返回一个错误。每个错误都包含一个HTTP响应代码和一个简短描述。错误通常通过简单的默认HTML页面显示给用户。幸运的是,您可以配置NGINX以向您的站点或 Web 应用程序的用户显示自定义错误页面。这可以使用 NGINX 的 error_page指...

Nginx如何配置正向代理:一步步教你轻松上手

Nginx作为一个高性能的HTTP和反向代理服务器,广泛应用于各类网站和服务中。然而,很多人可能不知道,Nginx同样可以配置为正向代理。今天我们就来详细讲解一下如何配置Nginx作为正向代理,让你的网络访问更加灵活便捷。什么是正向代理?正向代理是指客户端通过代理服务器访问目标服务器的过程。简单来说...