前段时间公司需要开放kafka集群到公网使用,为了实现内外网访问分离,查了一些资料都不太适合,踩了很多坑记录一下。
KAFKA集群三个节点:192.168.1.1、192.168.1.2、192.168.1.3
第一步:修改kafka配置,启动kafka
cd kafka/config
vim server.properties
#节点1配置
broker.id=0
host.name=192.168.1.1
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://kafka-cluster1.com:9092
#节点2配置
broker.id=1
host.name=192.168.1.2
listeners=PLAINTEXT://0.0.0.0:9093
advertised.listeners=PLAINTEXT://kafka-cluster1.com:9093
#节点3配置
broker.id=2
host.name=192.168.1.3
listeners=PLAINTEXT://0.0.0.0:9094
advertised.listeners=PLAINTEXT://kafka-cluster1.com:9094
第二步:使用nginx代理kafka访问
cd nginx
vim nginx.conf
#重要:在最后添加stream配置,跟http同级
stream {
proxy_connect_timeout 3s;
include /yourpath/nginx/vhosts/stream/*.conf;
}
#在vhost下新建文件夹stream
cd nginx/vhosts
mkdir stream
cd stream
vim yourdomain.conf
#添加如下配置
upstream kafka_cluster1 {
server 192.168.1.1:9092 max_fails=3 fail_timeout=30s;
}
upstream kafka_cluster2 {
server 192.168.1.2:9093 max_fails=3 fail_timeout=30s;
}
upstream kafka_cluster3 {
server 192.168.1.3:9094 max_fails=3 fail_timeout=30s;
}
server {
listen 9092;
proxy_timeout 300s;
proxy_pass kafka_cluster1;
}
server {
listen 9093;
proxy_timeout 300s;
proxy_pass kafka_cluster2;
}
server {
listen 9094;
proxy_timeout 300s;
proxy_pass kafka_cluster3;
}
第三步:重新加载nginx配置
第四步:在配置文件中配置kafka访问地址:(内网访问域名可以配置dns或者添加host解决)
spring.kafka.bootstrap-servers=kafka-cluster1.com:9092,kafka-cluster1.com:9093,kafka-cluster1.com:9094
友情提醒:KAFKA开放公网一定要主要安全,以防被黑客攻击。以上述配置为例,需要对nginx所在服务器9092,9093,9094端口,在安全组添加可访问IP白名单的限制,另外推荐对kafka添加SASL/SCRAM认证。