kafka代理,最近一直在搞kafka,皇冠上线前有个将kafka 集群暴露到外网的需求。那么问题来了,在内网时我们有足够的IP资源,DG游戏但是在公网上时,不可能给每个broker都分配一个IP。那么就需要有一个代理用来转发。 通过nginx做kafka代理kafka 配置broker1 配置代码语言:javascript 复制 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 broker2 配置代码语言:javascript 复制 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 broker3 配置代码语言:javascript 复制 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 配置 hostsbrokers 域名映射必须在 nginx,broker1,broker2,broker3 都配置上代码语言:javascript 复制 192.168.4.31 kafka01 192.168.4.65 kafka02 192.168.4.68 kafka03 客户端必须在client配置下列映射(192.168.4.60为nginxip)代码语言:javascript 复制 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。 nginx 配置代码语言:javascript 复制 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** 代码语言:javascript 复制 192.168.4.60 kafka01 192.168.4.60 kafka02 192.168.4.60 kafka03 (责任编辑:) |