docker-compose部署kafka with kraft 配置内网公网同时访问

需求

使用docker部署kafka broker,同时需要内网和公网同时访问,公司内网通过内网端口访问,外部通过公网端口访问。同时配置kafka通过SASL_PLAINTEXT认证。

同时,已经申请了外网端口19092,映射宿主机的9092端口。

docker-compose配置

yaml 复制代码
services:
  kafka:
    image: quay.io/debezium/kafka:${DEBEZIUM_VERSION}
    container_name: debezium-kafka
    ports:
      - 9092:9092
      - 9093:9093
      - 9094:9094
    volumes:
      - ./kafka/bin:/kafka/bin
      - ./kafka/config:/kafka/config
      - ./kafka/data:/kafka/data
    environment:
      - CLUSTER_ID=oh-sxaDRTcyAr6pFRbXyzA
      - NODE_ID=1
      - NODE_ROLE=combined
      - KAFKA_CONTROLLER_QUORUM_VOTERS=1@172.20.2.15:9093
      - KAFKA_LISTENERS=INTERNAL://0.0.0.0:9094,EXTERNAL://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
      - KAFKA_ADVERTISED_LISTENERS=INTERNAL://172.20.2.15:9094,EXTERNAL://${ADVERTISED_IP}:19092
      - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:SASL_PLAINTEXT,EXTERNAL:SASL_PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT,SSL:SSL,SASL_SSL:SASL_SSL
      - KAFKA_SASL_ENABLED_MECHANISMS=PLAIN
      - KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN
      - KAFKA_INTER_BROKER_LISTENER_NAME=INTERNAL
      - KAFKA_BROKER_ID=1
      - KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND=true

最重要的两个配置为:

  • KAFKA_LISTENERS=INTERNAL://0.0.0.0:9094,EXTERNAL://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
  • KAFKA_ADVERTISED_LISTENERS=INTERNAL://172.20.2.15:9094,EXTERNAL://${ADVERTISED_IP}:19092

对应kafka server.properties文件中的

bash 复制代码
listeners=INTERNAL://0.0.0.0:9094,EXTERNAL://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
advertised.listeners=INTERNAL://172.20.2.15:9094,EXTERNAL://6.8.9.3:19092

可以简单理解为,内网通过INTERNAL://172.20.2.15:9094 进行访问,公网通过EXTERNAL://6.8.9.3:19092进行访问。

但是值得注意的是通过公网访问的EXTERNAL://6.8.9.3:19092最终被映射到了EXTERNAL://0.0.0.0:9092,注意端口是不一样的。这一点必须跟上面提到的宿主机的9092端口映射到了公网的19092端口对应起来。

如果这两个端口对应不起来,通过公网访问的时候会出现连不上kafka的问题。

相关推荐
&&月弥5 小时前
三大开源消息队列(Kafka、RabbitMQ、RocketMQ)使用教程
kafka·开源·rabbitmq
百锦再15 小时前
Java 并发编程进阶,从线程池、锁、AQS 到并发容器与性能调优全解析
java·开发语言·jvm·spring·kafka·tomcat·maven
我真会写代码19 小时前
从入门到精通:Kafka核心原理与实战避坑指南
分布式·缓存·kafka
一叶飘零_sweeeet20 小时前
击穿 Kafka 高可用核心:分区副本、ISR 机制与底层原理全链路拆解
分布式·架构·kafka
indexsunny2 天前
互联网大厂Java面试实战:从Spring Boot到微服务架构的深度解析
java·spring boot·spring cloud·kafka·prometheus·security·microservices
睡醒的土豆2 天前
解决 Kafka 管理工具中文乱码问题
分布式·kafka
殷紫川2 天前
击穿 Kafka 高可用核心:分区副本、ISR 机制与底层原理全链路拆解
架构·kafka
岁岁种桃花儿2 天前
Flink从入门到上天系列第二十五篇:Flink和Kafka连接时的精准一次性
大数据·flink·kafka
七夜zippoe2 天前
消息队列选型:Kafka vs RabbitMQ vs Redis 深度对比
redis·python·kafka·消息队列·rabbitmq