首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kafka:用nginx做kafka集群代理(非http)

Kafka:用nginx做kafka集群代理(非http)

作者头像
cosmozhu
修改2025-09-16 14:22:26
修改2025-09-16 14:22:26
17.8K2
举报
文章被收录于专栏:cosmozhu技术篇cosmozhu技术篇

kafka代理?>

kafka代理,最近一直在搞kafka,上线前有个将kafka 集群暴露到外网的需求。那么问题来了,在内网时我们有足够的IP资源,但是在公网上时,不可能给每个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

配置 hosts

brokers 域名映射必须在 nginx,broker1,broker2,broker3 都配置上
代码语言:javascript
复制
192.168.4.31 kafka01
192.168.4.65 kafka02
192.168.4.68 kafka03
客户端必须在client配置下列映射(192.168.4.60nginxip)
代码语言: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

作者:cosmozhu --90后的老父亲,专注于保护地球的程序员

个人网站:https://www.cosmozhu.fun

欢迎转载,转载时请注明出处。

相关文章

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通过nginx做kafka代理
    • kafka 配置
      • broker1 配置
      • broker2 配置
      • broker3 配置
    • 配置 hosts
      • brokers 域名映射必须在 nginx,broker1,broker2,broker3 都配置上
      • 客户端必须在client配置下列映射(192.168.4.60为nginxip)
    • nginx 配置
    • 需要注意的坑
    • 相关文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档