Nginx反向代理Kafka集群
前言
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的反向代理,如何编译可自行搜索相关文档。
- 修改
nginx/conf/nginx.conf的配置,导入conf.d目录下所有*-stream.conf的配置文件。如果配置很少,也可以直接写在nginx.conf文件里面。
stream {
include conf.d/*-stream.conf;
}
- 编辑
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;
}
- 测试并重加载nginx配置
nginx -t
nginx -s reload
firewalld配置
- 安装firewalld
sudo apt install -y firewalld
- 设置默认zone为drop,即拒绝所有入站流量
sudo firewall-cmd --set-default-zone=drop
- 添加放行入站端口
sudo firewall-cmd --add-port=22/tcp --add-port=80/tcp --add-port=443/tcp --add-port=8000/tcp --permanent --zone=drop
- 重加载
sudo firewall-cmd --reload
- 在客户端测试能否访问其它端口。结果不为0即访问失败。
timeout 1 bash -c "cat < /dev/null > /dev/tcp/192.168.0.41/9092" > /dev/null 2>&1;echo $?
客户端配置
- 修改
/etc/hosts,添加配置
192.168.0.41 kafka-cluster
- 使用kafka自带工具启动生产者
./bin/kafka-console-producer.sh --broker-list kafka-cluster:8000 --topic testtopic
- 在另一个终端启动消费者
./bin/kafka-console-consumer.sh --bootstrap-server kafka-cluster:8000 --topic testtopic --from-beginning
- 在生产者终端随便输入点字符,如果消费者终端也能看到,说明nginx代理成功。
Nginx反向代理Kafka集群的更多相关文章
- .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡
1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...
- 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 ...
- Docker Compose一键部署Nginx反向代理Tomcat集群
目录结构如下 mysql/conf/my.cnf [mysqld] user=mysql port=3306 datadir=/var/lib/mysql socket=/var/lib/mysql/ ...
- Nginx学习笔记(反向代理&搭建集群)
一.前言 1.1 大型互联网架构演变历程 1.1.1 淘宝技术 淘宝的核心技术(国内乃至国际的 Top,这还是2011年的数据) 拥有全国最大的分布式 Hadoop 集群(云梯,2000左右节点,24 ...
- Centos 7.6配置nginx反向代理负载均衡集群
一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76 nginx负载均衡器 192.168.2.82 web ...
- Centos 7配置nginx反向代理负载均衡集群
一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76 nginx负载均衡器 192.168.2.82 web ...
- Centos 7.6配置nginx反向代理,直接yum安装
一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76 nginx负载均衡器 192.168.2.82 web ...
- Linux之nginx反向代理+三台web+nfs共享存储实现集群配置
作业四:nginx反向代理+三台web+nfs共享存储实现集群配置 在各个web服务器上挂载nfs [root@localhost nginx]# mount -t nfs 192.168.152.1 ...
- 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 ...
- Nginx代理MysqlCluster集群(二)
Nginx代理MySql集群本次实验采用nginx 版本1.12以上 集合了tcp代理功能只需在编译时明文开启指定的功能 --with-stream--prefix=/usr/local/ngin - ...
随机推荐
- Java基于线程池和AQS模拟高并发
概述 <手写高并发下线程安全的单例模式>主要介绍使用枚举类实现JAVA单例模式,以及在高并发环境下验证此单例模式是线程安全的.本文借助ReentrantLock.CountDownLa ...
- 面试题:Spring BeanFactory和FactoryBean的区别
BeanFactory:以Factory结尾,表明它是一个工厂类(接口),它是Spring IOC容器的核心接口,负责实例化和管理bean的一个工厂,为具体的IoC容器的实现提供规范.BeanFa ...
- HanTTS简单文档
先下载 https://gitee.com/dhfhub/HanTTS 然后输入命令 main.py synthesize --text 你的话 --src "syllables/" ...
- 【2020.11.17提高组模拟】数数(cuvelia) 题解
[2020.11.17提高组模拟]数数(cuvelia) 题解 题目描述 给你一个长度为n的序列\(a_1...a_n\).对于所有的\(k\in [1,n]\)选择序列中的\(k\)个数(下标为\( ...
- Dify实战案例:MySQL查询助手!嘎嘎好用
有了 AI 之后,我们在查询数据库的时候就不需要使用数据库客户端或程序(如 Java.Python)来查询了,我们可以直接使用 AI 来查询数据库,并且查询语句都不用你来写了,AI 会自动帮你生成. ...
- sql注入绕过某waf
简单布尔判断 直接输入and 1=1拦截 使用mysql黑魔法 and{a 1=1} and{a 1=2}不拦截 本地mysql测试语句正常执行 简单延时判断 and sleep(1) 简单测试后在( ...
- 用 Tarjan 算法求解无向图的割点和割边
上期回顾:https://www.cnblogs.com/ofnoname/p/18823922 Tarjan 算法与无向图 连接性分析是图论的核心,而Tarjan算法为我们提供了穿透复杂网络结构的通 ...
- MongoDB入门实战教程(3)
上一篇我们了解了MongoDB的复制集概念和复制集的搭建,本篇我们来了解一下如何实现数据恢复 和 提升安全性的一些实践. 1 Mongo Tools实现数据恢复 MongoDB 4.4之后,备份与恢复 ...
- MySQL核心知识学习之路(3)
作为一个后端工程师,想必没有人没用过数据库,跟我一起复习一下MySQL吧,本文是我学习<MySQL实战45讲>的总结笔记的第三篇,总结了MySQL的索引相关知识. 上一篇:MySQL核心知 ...
- C# Winform 自定义 时间线 控件
推荐 官网 http://www.hzhcontrols.com/ NetWinform自定义控件 English README.md(github) English README.md(gitee) ...