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

相关推荐
Wang's Blog1 小时前
Kafka: HTTPS证书申请集成指南
分布式·https·kafka
Wang's Blog4 小时前
Kafka: 消费者高级实践之分区控制、多线程处理与 Offset 管理
分布式·kafka
Lisonseekpan7 小时前
Kafka、ActiveMQ、RabbitMQ、RocketMQ对比
java·后端·kafka·rabbitmq·rocketmq·activemq
Wang's Blog7 小时前
Kafka: 分布式配置动态更新之微服务总线实现
分布式·微服务·kafka
我认不到你8 小时前
动态线程池+kafka自定义拒绝策略,做到任务不丢失
java·spring boot·spring cloud·kafka
yumgpkpm8 小时前
Hadoop如何用Flink支持实时数据分析需求
大数据·hadoop·分布式·hdfs·flink·kafka·cloudera
川211 天前
Kafka消息中间件(超大数据吞吐量)使用
分布式·kafka
Wang's Blog1 天前
Kafka: 基于 NestJS 的问卷系统配置与业务实现
分布式·kafka
太阳伞下的阿呆2 天前
kafka高吞吐持久化方案(2)
分布式·kafka·高并发·重入锁
Chasing__Dreams2 天前
kafka--基础知识点--19--消息重复
分布式·kafka