【问题标题】:Can I set the advertised port from the assigned port by scaling kafka using docker compose?我可以通过使用 docker compose 缩放 kafka 从分配的端口设置广告端口吗?
【发布时间】:2019-09-24 13:46:26
【问题描述】:

我正在尝试使用 docker compose 扩展 kafka。

我的 docker-compose.yaml 看起来像这样:-

version: '3'
services:
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      - KAFKA_ADVERTISED_HOST_NAME=127.0.0.1
      - KAFKA_ADVERTISED_PORT=9092
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
    depends_on:
      - zookeeper
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
    environment:
      - KAFKA_ADVERTISED_HOST_NAME=zookeeper

我尝试使用它来扩大规模

$docker-compose scale kafka=3

这个问题是容器端口需要是唯一的,因此我将端口部分更改为:-

ports:
      - "9092-9095:9092"

但是,现在我无法知道在运行时之前分配了哪个端口,有没有办法检索分配的端口并将其分配给环境变量 KAFKA_ADVERTISED_PORT?

我已经看到很多例子,它们为每个 kafka 服务定义了 3 个单独的服务,我不太喜欢,因为这违反了 DRY 原则。

【问题讨论】:

    标签: docker apache-kafka docker-compose


    【解决方案1】:

    您需要重复自己,因为您无法在缩放操作期间编辑环境变量。如您所描述的,如果您在一台机器上,则不能多次通告 127.0.0.1 和同一个端口。

    如果您使用的是 Docker Swarm,那么无论如何代理都将位于不同的主机上,因此端口可能是相同的,这就是扩展操作真正有用的地方。否则,你会让一台机器完成一台经纪人三倍的工作,而收益却微乎其微

    如果您真的不想“重复自己”,那么 Kubernetes Helm Chart 将有助于模板化多个有状态的服务


    另外:Zookeeper 容器不使用广告名称或任何以 KAFKA 开头的变量

    你应该公布外部主机 IP,而不是 127.0.0.1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-10
      • 2021-11-13
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多