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的问题。

相关推荐
a587697 分钟前
消息队列(MQ)初级入门:详解RabbitMQ与Kafka
java·分布式·microsoft·面试·kafka·rabbitmq
Hello.Reader1 小时前
Kafka在多环境中安全管理敏感
分布式·安全·kafka
AutoMQ2 小时前
AutoMQ 亮相首尔:KafkaKRU 分享日志流处理新思路
kafka·开源·云计算
白鲸开源2 小时前
一行代码引发 12G 内存 5 分钟爆仓!SeaTunnel Kafka 连接器"内存溢出"元凶抓到了
数据库·kafka·开源
在未来等你4 小时前
Kafka面试精讲 Day 14:集群扩容与数据迁移
大数据·分布式·面试·kafka·消息队列
在未来等你18 小时前
Kafka面试精讲 Day 8:日志清理与数据保留策略
大数据·分布式·面试·kafka·消息队列
echoyu.19 小时前
消息队列-初识kafka
java·分布式·后端·spring cloud·中间件·架构·kafka
cg.family1 天前
Doris 消费kafka消息
kafka·doris
趴着喝可乐1 天前
openEuler2403安装部署Kafka
kafka·openeuler