我可以通过使用docker compose缩放kafka从指定的端口设置播发端口吗?

wwwo4jvm  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(351)

我正在尝试用docker compose缩放Kafka。
我的docker-compose.yaml看起来像this:-

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部分改为this:-

ports:
      - "9092-9095:9092"

但是,直到运行时我才知道分配了什么端口,有没有方法检索分配的端口并将其分配给环境变量kafka\u\u port?
我已经看到了很多例子,为每个kafka服务定义了3个独立的服务,我不太喜欢,因为这打破了枯燥的原则。

hujrc8aj

hujrc8aj1#

您需要重复自己的操作,因为在缩放操作期间无法编辑环境变量。如果你在一台机器上,就不能做广告 127.0.0.1 和同一个端口多次,正如你所描述的。
如果您使用的是docker swarm,那么代理将位于不同的主机上,因此端口可以是相同的,这就是规模操作真正有用的地方。否则,你会让一台机器做三倍于一个代理的工作,几乎得不到什么好处
如果您真的不想“重复您自己”,那么kubernetes helm图表将有助于模板化多个有状态服务
旁白:zookeeper容器不使用广告名称或任何以kafka开头的变量
您应该公布外部主机ip,而不是127.0.0.1

相关问题