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
分布式·kafka
wending-Y5 小时前
如何正确理解flink 消费kafka时的watermark
flink·kafka·linq
沐浴露z5 小时前
Kafka入门:基础架构讲解,安装与使用
java·分布式·kafka
鼠鼠我捏,要死了捏8 小时前
Kafka消息可靠性方案对比与实践
kafka·rabbitmq·消息可靠性
wu~9708 小时前
Kafka底层解析:可靠性与高性能原理
分布式·kafka·操作系统
老葱头蒸鸡17 小时前
(3)Kafka生产者分区策略、ISR、ACK、一致性语义
分布式·kafka
在未来等你2 天前
Kafka面试精讲 Day 25:Kafka与大数据生态集成
大数据·分布式·面试·kafka·消息队列
好玩的Matlab(NCEPU)2 天前
消息队列RabbitMQ、Kafka、ActiveMQ 、Redis、 ZeroMQ、Apache Pulsar对比和如何使用
kafka·rabbitmq·activemq
在未来等你3 天前
Kafka面试精讲 Day 29:版本升级与平滑迁移
大数据·分布式·面试·kafka·消息队列
在未来等你3 天前
Kafka面试精讲 Day 30:Kafka面试真题解析与答题技巧
大数据·分布式·面试·kafka·消息队列