前言

kafka集群的网络没法被客户端直接访问,中间需要有个代理。正常网络情况下,kafka会给客户端返回所有的broker地址,如果客户端无法访问到broker就会报错,所以kafka给客户端返回的地址需要是客户端能访问的代理服务器地址。

本文的测试环境中,使用nginx来反向代理kafka集群。nginx和kafka部署在同一台机器上,使用firewalld确保只开放8000端口,拒绝机器外访问kafka的端口。

  • nginx版本:1.28,IP:192.168.0.41,使用8000端口代理kafka集群
  • kafka版本:2.13-3.9.1,使用kraft组单点集群, IP:192.168.0.41。搭建过程见我的另一篇博客 使用KRaft部署单点kafka集群
  • 客户端IP:192.168.0.108

kafka配置

因为使用的是kraft,所以修改 config/kraft/server.properties配置文件,只需要修改advertised.listeners的配置。如下,PLAINTEXT指的是客户端访问地址,CONTROLLER因为是kafka内部集群通信才用到,所以只需要修改PLAINTEXT为nginx代理地址即可。PLAINTEXT试了需要写成hostname,而不能是ip地址,否则客户端还是会报错。

# 旧配置,PLAINTEXT为Kakfa broker的监听地址
# advertised.listeners=PLAINTEXT://192.168.0.41:9092,CONTROLLER://192.168.0.41:19092 # 新配置,PLAINTEXT为Nginx代理服务器的地址
advertised.listeners=PLAINTEXT://kafka-cluster:8000,CONTROLLER://192.168.0.41:19092

kafka 机器的/etc/hosts添加配置192.168.0.41 kafka-cluster(不确定到底要不要配置,懒得再测了,感兴趣的可以自行尝试)

配置修改完成后,重启kafka所有节点。

nginx配置

nginx需要有编译参数--with-stream才能支持TCP/UDP的反向代理,如何编译可自行搜索相关文档。

  1. 修改nginx/conf/nginx.conf的配置,导入conf.d目录下所有*-stream.conf的配置文件。如果配置很少,也可以直接写在nginx.conf文件里面。
stream {
include conf.d/*-stream.conf;
}
  1. 编辑nginx/conf/conf.d/kafka-stream.conf
upstream kafka-endpoints {
server 192.168.0.41:9092;
server 192.168.0.41:9093;
server 192.168.0.41:9094;
} server {
listen 8000;
proxy_pass kafka-endpoints;
}
  1. 测试并重加载nginx配置
nginx -t
nginx -s reload

firewalld配置

  1. 安装firewalld
sudo apt install -y firewalld
  1. 设置默认zone为drop,即拒绝所有入站流量
sudo firewall-cmd --set-default-zone=drop
  1. 添加放行入站端口
sudo firewall-cmd --add-port=22/tcp --add-port=80/tcp --add-port=443/tcp --add-port=8000/tcp --permanent --zone=drop
  1. 重加载
sudo firewall-cmd --reload
  1. 在客户端测试能否访问其它端口。结果不为0即访问失败。
timeout 1 bash -c "cat < /dev/null > /dev/tcp/192.168.0.41/9092" > /dev/null 2>&1;echo $?

客户端配置

  1. 修改/etc/hosts,添加配置
192.168.0.41    kafka-cluster
  1. 使用kafka自带工具启动生产者
./bin/kafka-console-producer.sh --broker-list kafka-cluster:8000 --topic testtopic
  1. 在另一个终端启动消费者
./bin/kafka-console-consumer.sh --bootstrap-server kafka-cluster:8000 --topic testtopic --from-beginning
  1. 在生产者终端随便输入点字符,如果消费者终端也能看到,说明nginx代理成功。

Nginx反向代理Kafka集群的更多相关文章

  1. .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡

    1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...

  2. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第九集之安装Tomcat+Nginx反向代理Tomcat集群】

    1,安装Tomcat:和在windows下安装是一样的. 安装tomcat:上传后解压: tar -zxvf apache-tomcat-7.0.88.tar.gz -z:代表.gz格式的压缩包,-x ...

  3. Docker Compose一键部署Nginx反向代理Tomcat集群

    目录结构如下 mysql/conf/my.cnf [mysqld] user=mysql port=3306 datadir=/var/lib/mysql socket=/var/lib/mysql/ ...

  4. Nginx学习笔记(反向代理&搭建集群)

    一.前言 1.1 大型互联网架构演变历程 1.1.1 淘宝技术 淘宝的核心技术(国内乃至国际的 Top,这还是2011年的数据) 拥有全国最大的分布式 Hadoop 集群(云梯,2000左右节点,24 ...

  5. Centos 7.6配置nginx反向代理负载均衡集群

    一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web ...

  6. Centos 7配置nginx反向代理负载均衡集群

    一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web ...

  7. Centos 7.6配置nginx反向代理,直接yum安装

    一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web ...

  8. Linux之nginx反向代理+三台web+nfs共享存储实现集群配置

    作业四:nginx反向代理+三台web+nfs共享存储实现集群配置 在各个web服务器上挂载nfs [root@localhost nginx]# mount -t nfs 192.168.152.1 ...

  9. nginx反向代理+集群

    1.前期准备: client:192.168.4.1 eth0 proxy:192.168.4.5 eth0 web1:192.168.4.100 eth0 内容2 web2:192.168.4.20 ...

  10. Nginx代理MysqlCluster集群(二)

    Nginx代理MySql集群本次实验采用nginx 版本1.12以上 集合了tcp代理功能只需在编译时明文开启指定的功能 --with-stream--prefix=/usr/local/ngin - ...

随机推荐

  1. 注解@Transactional事务失效的常见场景

    在<Spring Boot事务管理>中,小编介绍了注解@Transactional的基本属性和使用方法,这里介绍事务失效的八种场景,使大家对注解@Transactional有一个更深刻的认 ...

  2. Spring AOP 面向切面编程之搞定表单重复提交实战

    摘要:客户端在5秒内请求同一URL,而且关键请求参数相等,则视此次请求为重复提交,利用自定义注解 .Spring AOP 和 Guava Cache 技术栈在服务器端实现拦截表单重复提交,防止刷单. ...

  3. C#代码事件

    C#代码事件 从今天开始,WPF 的学习将上升到一个新的高度.之前主要都是围绕着界面上的内容,今天了解 C# 代码,让界面真正意义上能够有功能. 本文同时为b站WPF课程的笔记,相关示例代码 上节课自 ...

  4. 人形机器人全能赛openmv巡线代码

    人形机器人全能赛openmv巡线代码 import sensor, image, time from pyb import LED, millis, UART from math import pi, ...

  5. 什么是网格变形?HyperWorks网格变形设置方法

    HyperMorph 是 HyperMesh 向用户提供的强大的网格变形工具.它可以在保证基本网格形态和质量的前提下,按照用户使用需求,自如的对已有的有限元模型进行网格变形. HyperMorph 可 ...

  6. 【题解·2025 ICPC Nanchang Invitational Contest】L. Regnaissance

    题目链接 简要题意 给定一棵 \(n\) 个点的无根树,请回答下面 \(q\) 次询问:当以点 \(rt_i\) 为根时,编号在 \([l_i,r_i]\) 中的点的 \(\text{LCA}\) 是 ...

  7. TCP入门简单例子

    TCP的简单例子 TCP最简单聊天室 客户端 连接服务器 Socket 发送消息 package TCP; import java.io.IOException; import java.io.Out ...

  8. SQL Server 清除表TRUNCATE TABLE 提示: 因为该表正由 FOREIGN KEY 约束引用

    https://blog.csdn.net/dengguawei0519/article/details/101315699 1.找到引用这个表外键名称 SELECT * FROM sys.forei ...

  9. leetcode 54 螺旋数组

    简介 忘不了, 这是华为面试官给我的面试题, 但是我没有在1分钟内做出来. 或许那个时候面试官本来就不想要一个人. 使用模拟的方法. 使用一个visited数组, 判断是否走到边界, 只有四个方向: ...

  10. 关于 python 人脸检测库 dlib 的 初识 2

    简介 关于人脸检测算法python库的初步认识2 使用CNN的实现人脸检测 简单说明 The example loads a pretrained model and uses it to find ...