前言

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. Java基于线程池和AQS模拟高并发

    概述   <手写高并发下线程安全的单例模式>主要介绍使用枚举类实现JAVA单例模式,以及在高并发环境下验证此单例模式是线程安全的.本文借助ReentrantLock.CountDownLa ...

  2. 面试题:Spring BeanFactory和FactoryBean的区别

      BeanFactory:以Factory结尾,表明它是一个工厂类(接口),它是Spring IOC容器的核心接口,负责实例化和管理bean的一个工厂,为具体的IoC容器的实现提供规范.BeanFa ...

  3. HanTTS简单文档

    先下载 https://gitee.com/dhfhub/HanTTS 然后输入命令 main.py synthesize --text 你的话 --src "syllables/" ...

  4. 【2020.11.17提高组模拟】数数(cuvelia) 题解

    [2020.11.17提高组模拟]数数(cuvelia) 题解 题目描述 给你一个长度为n的序列\(a_1...a_n\).对于所有的\(k\in [1,n]\)选择序列中的\(k\)个数(下标为\( ...

  5. Dify实战案例:MySQL查询助手!嘎嘎好用

    有了 AI 之后,我们在查询数据库的时候就不需要使用数据库客户端或程序(如 Java.Python)来查询了,我们可以直接使用 AI 来查询数据库,并且查询语句都不用你来写了,AI 会自动帮你生成. ...

  6. sql注入绕过某waf

    简单布尔判断 直接输入and 1=1拦截 使用mysql黑魔法 and{a 1=1} and{a 1=2}不拦截 本地mysql测试语句正常执行 简单延时判断 and sleep(1) 简单测试后在( ...

  7. 用 Tarjan 算法求解无向图的割点和割边

    上期回顾:https://www.cnblogs.com/ofnoname/p/18823922 Tarjan 算法与无向图 连接性分析是图论的核心,而Tarjan算法为我们提供了穿透复杂网络结构的通 ...

  8. MongoDB入门实战教程(3)

    上一篇我们了解了MongoDB的复制集概念和复制集的搭建,本篇我们来了解一下如何实现数据恢复 和 提升安全性的一些实践. 1 Mongo Tools实现数据恢复 MongoDB 4.4之后,备份与恢复 ...

  9. MySQL核心知识学习之路(3)

    作为一个后端工程师,想必没有人没用过数据库,跟我一起复习一下MySQL吧,本文是我学习<MySQL实战45讲>的总结笔记的第三篇,总结了MySQL的索引相关知识. 上一篇:MySQL核心知 ...

  10. C# Winform 自定义 时间线 控件

    推荐 官网 http://www.hzhcontrols.com/ NetWinform自定义控件 English README.md(github) English README.md(gitee) ...