通过docker-compose部署内外网同时访问的kafka环境

前置

最近疫情原因在家办公,环境受限,需要部署一台能外网访问的kafka进行联调
公司的外网环境是通过防火墙(或其他的,沟通硬件同事处理的),把内网的服务器的部分端口映射到一台外网服务器的端口上
举个例子就是如果把服务器上的tomcat端口8080映射到外网的9090,那么外网就应该使用外网ip:9090访问,通过防火墙映射之后实际访问的就是内网ip:8080

问题

最近服务器上的环境都是通过docker部署的(真香警告),所以kafka也准备dock-compose顺带部署zookeeper,使用的是wurstmeister/kafka镜像,在编写docker-compose的时候,environment中的KAFKA_ADVERTISED_LISTENERS配置项,配置为docker宿主机ip端口不行,配置为外网ip端口也不行,一下午都没有解决问题,晚上饭前突然在B站想搜下这个问题,没想到真看到了问题的关键,在此感谢av86383539的UP主,虽然没有联系上UP主解决问题,但是思路很重要,说出来你们可能不信,我居然真的在B站搞学习

解决

在这里发个小牢骚,国内的技术网站都没找到和kafka,inside和outside相关的,部署kafka全部都是verson2版本的docker-compose,不是说不能用,而是重复的内容互相抄,千篇一律,给搜索造成了较大的困扰

配置文件:docker-compose.yml

version: "3"
services:
 zookeeper:
  image: wurstmeister/zookeeper
  ports:
   - "19005:2181" 
 kafka:
  image: wurstmeister/kafka
  hostname: kafka
  ports:
   - "19004:19004"  
  environment:
   TZ: CST-8
   KAFKA_BROKER_ID: 3
   KAFKA_ADVERTISED_HOST_NAME: kafka
   KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
   KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:19004
   KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9092,OUTSIDE://{外网ip}:19004
   KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
   KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
  volumes:
   - /var/run/docker.sock:/var/run/docker.sock
  links:
   - zookeeper

大致解释下:
KAFKA_LISTENERSKAFKA_ADVERTISED_LISTENERS,配置内网(INSIDE)9092外网(OUTSIDE)19004,kafka将同时监听这两个地址,配置时只需要修改端口,并把配置文件中{外网ip}替换为真实的,此次配置的重点
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP是配置协议
KAFKA_INTER_BROKER_LISTENER_NAME是指kafka集群时内部访问使用的默认方式

PS:zookeeper也映射出来了,小伙伴根据实际情况,不影响

结尾

测试使用kafka tool工具连接,需要注意的是配置了zookeeper地址端口后connect会提示有one or more brokers have multiple endpoints···,我们需要做的是切换到Advancedtab页,配置Bootstrap servers为外网broker,涉及到IP就不截图了,完结撒花

web项目中使用的是springboot,只需要配置spring.kafka.bootstrap-servers不需要关注zookeeper,撒花x2


简书第一贴简书第一书,撒花X3

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容