我可以通过使用docker compose扩展kafka来从分配的端口设置发布的端口吗?

时间:2019-09-24 03:56:12

标签: docker apache-kafka docker-compose

我正在尝试使用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原则。

1 个答案:

答案 0 :(得分:0)

您需要重复自己的操作,因为在缩放操作期间无法编辑环境变量。如前所述,如果您在一台计算机上,则无法多次发布127.0.0.1和相同的端口。

如果您使用的是Docker Swarm,则无论如何,代理都将位于单独的主机上,因此端口可以相同,这就是扩展操作真正有用的地方。否则,您使一台机器完成的工作量是一名经纪人的三倍,而获得的收益却很少

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


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

并且您应该公布外部主机IP,而不是127.0.0.1