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

相关推荐
xiamo@moment6 小时前
kafka学习笔记-概念总集
运维·kafka
あ-2 天前
kafka broker迁移
kafka
海兰2 天前
【 Kafka进阶5】使用 Docker 部署 Apache Kafka 集群完全指南
docker·kafka·apache
海兰3 天前
【Kafka进阶4】KRaft 完全指南:Apache Kafka 摆脱 ZooKeeper 的架构
zookeeper·kafka·apache
海兰4 天前
【 Kafka进阶3】Apache Kafka 分布式事件流平台:架构原理与微服务解耦机制简要分析
分布式·架构·kafka
小白一枚134 天前
[学习笔记]Kafka 篇:从原理到实战的一站式指南
大数据·运维·elk·kafka·个人开发
阿里云云原生4 天前
还在给 AI “喂冷饭”?8.28 上海沙龙:带你跨越 AI 实时上下文鸿沟
云原生·kafka
海兰5 天前
【Kafka学习4】六大核心 API
学习·kafka·linq
NJCloud5 天前
ELK企业级日志分析平台(四)——基于 ELFK + Kafka 的日志采集与传输平台部署实践
linux·运维·分布式·elk·kafka
海兰6 天前
【Kafka学习3】Apache Kafka 本地部署环境快速入门指南
学习·kafka·apache