0
文章目录
kafka代理?>
kafka代理,最近一直在搞kafka,上线前有个将kafka 集群暴露到外网的需求。那么问题来了,在内网时我们有足够的IP资源,但是在公网上时,不可能给每个broker都分配一个IP。那么就需要有一个代理用来转发。
broker.id=1
############################# Socket Server Settings #############################
listener.security.protocol.map=LOCAL_LISTENER:PLAINTEXT,INTERNAL_LISTENER:SASL_PLAINTEXT,EXTERNAL_LISTENER:SSL
listeners=LOCAL_LISTENER://127.0.0.1:9092,INTERNAL_LISTENER://kafka01:9093,EXTERNAL_LISTENER://kafka01:18001
advertised.listeners=INTERNAL_LISTENER://kafka01:9093,EXTERNAL_LISTENER://kafka01:18001
broker.id=2
############################# Socket Server Settings #############################
listener.security.protocol.map=LOCAL_LISTENER:PLAINTEXT,INTERNAL_LISTENER:SASL_PLAINTEXT,EXTERNAL_LISTENER:SSL
listeners=LOCAL_LISTENER://127.0.0.1:9092,INTERNAL_LISTENER://kafka02:9093,EXTERNAL_LISTENER://kafka02:18001
advertised.listeners=INTERNAL_LISTENER://kafka02:9093,EXTERNAL_LISTENER://kafka02:18001
broker.id=3
############################# Socket Server Settings #############################
listener.security.protocol.map=LOCAL_LISTENER:PLAINTEXT,INTERNAL_LISTENER:SASL_PLAINTEXT,EXTERNAL_LISTENER:SSL
listeners=LOCAL_LISTENER://127.0.0.1:9092,INTERNAL_LISTENER://kafka03:9093,EXTERNAL_LISTENER://kafka03:18001
advertised.listeners=INTERNAL_LISTENER://kafka03:9093,EXTERNAL_LISTENER://kafka03:18001
nginx
,broker1
,broker2
,broker3
都配置上192.168.4.31 kafka01
192.168.4.65 kafka02
192.168.4.68 kafka03
client
配置下列映射(192.168.4.60
为nginx
ip)192.168.4.60 kafka01
192.168.4.60 kafka02
192.168.4.60 kafka03
为何在client 需要这样配置?
因为,client 第一次访问brokers时会将metadata获取,其中包含了在kafka配置的真实地址,这里将会是kafka01
,kafka02
,kafka03
,之后生产或者消费数据都将从这三个地址获取。如果不将这三个域名映射到nginx代理上,则会提示找不到有效的brokers。
stream{
upstream brokers{
server 192.168.4.31:18001;
server 192.168.4.65:18001;
server 192.168.4.68:18001;
}
server{
listen 18001;
proxy_pass brokers;
}
}
虽然在客户端我们配置的 hosts kafka01
,kafka02
,kafka03
都指向的是nginx地址,在程序上配置brokers地址的时候不能偷懒只配置一个例如,kafka01:18001
,这样是有问题的,当nginx将请求随机转发到kafka01
上时一切正常。但是当转发到其他两个机器kafka02
,kafka03
时,消费者会显示已连接,但是读取不到任何数据。(是因为我的topic只有一个分区一个副本的原因?)
所以要特别注意的是:客户端使用的kafka连接为:**kafka01:18001,kafka02:18001,kafka02:18001
**
192.168.4.60 kafka01
192.168.4.60 kafka02
192.168.4.60 kafka03
作者:cosmozhu --90后的老父亲,专注于保护地球的程序员
欢迎转载,转载时请注明出处。