Nginx反向代理Kafka集群配置詳解
前言
kafka集群的網(wǎng)絡(luò)沒法被客戶端直接訪問,中間需要有個代理。正常網(wǎng)絡(luò)情況下,kafka會給客戶端返回所有的broker地址,如果客戶端無法訪問到broker就會報錯,所以kafka給客戶端返回的地址需要是客戶端能訪問的代理服務(wù)器地址。
本文的測試環(huán)境中,使用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。搭建過程見我的另一篇博客 詳細(xì)講解Docker-Compose部署Kafka KRaft集群環(huán)境
- 客戶端IP:192.168.0.108
kafka配置
因為使用的是kraft,所以修改 config/kraft/server.properties配置文件,只需要修改advertised.listeners的配置。如下,PLAINTEXT指的是客戶端訪問地址,CONTROLLER因為是kafka內(nèi)部集群通信才用到,所以只需要修改PLAINTEXT為nginx代理地址即可。PLAINTEXT試了需要寫成hostname,而不能是ip地址,否則客戶端還是會報錯。
# 舊配置,PLAINTEXT為Kakfa broker的監(jiān)聽地址 # advertised.listeners=PLAINTEXT://192.168.0.41:9092,CONTROLLER://192.168.0.41:19092 # 新配置,PLAINTEXT為Nginx代理服務(wù)器的地址 advertised.listeners=PLAINTEXT://kafka-cluster:8000,CONTROLLER://192.168.0.41:19092
kafka 機器的/etc/hosts添加配置192.168.0.41 kafka-cluster(不確定到底要不要配置,懶得再測了,感興趣的可以自行嘗試)
配置修改完成后,重啟kafka所有節(jié)點。
nginx配置
nginx需要有編譯參數(shù)--with-stream才能支持TCP/UDP的反向代理,如何編譯可自行搜索相關(guān)文檔。
- 修改
nginx/conf/nginx.conf的配置,導(dǎo)入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
- 設(shè)置默認(rèn)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
- 在客戶端測試能否訪問其它端口。結(jié)果不為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自帶工具啟動生產(chǎn)者
./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
- 在生產(chǎn)者終端隨便輸入點字符,如果消費者終端也能看到,說明nginx代理成功。
到此這篇關(guān)于Nginx反向代理Kafka集群的文章就介紹到這了,更多相關(guān)Nginx反向代理Kafka集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
服務(wù)器重啟后寶塔界面打開顯示404 nginx的解決方法
在阿里云服務(wù)器搭建寶塔界面,服務(wù)器重啟之后打開寶塔顯示404 not found nginx,本文給大家介紹了服務(wù)器重啟后寶塔界面打開顯示404 nginx的解決方法,需要的朋友可以參考下2024-02-02
nginx location中uri的截取的實現(xiàn)方法
這篇文章主要介紹了nginx location中uri的截取的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Nginx的location路徑與proxy_pass匹配規(guī)則說明
這篇文章主要介紹了Nginx的location路徑與proxy_pass匹配規(guī)則說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
使用Bash腳本和Logrotate實現(xiàn)Nginx日志切割的方法
Logrotate是一個Linux系統(tǒng)上用來管理日志文件的工具,它可以定期輪轉(zhuǎn)日志文件、壓縮舊的日志文件以及刪除過期的日志文件,這篇文章主要介紹了使用Bash腳本和Logrotate實現(xiàn)Nginx日志切割,需要的朋友可以參考下2024-05-05

