前言
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。搭建过程见我的另一篇博客 详细讲解docker-compose部署kafka kraft集群环境
- 客户端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集群的文章就介绍到这了,更多相关nginx反向代理kafka集群内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论