我正在尝试用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个独立的服务,我不太喜欢,因为这打破了枯燥的原则。
1条答案
按热度按时间hujrc8aj1#
您需要重复自己的操作,因为在缩放操作期间无法编辑环境变量。如果你在一台机器上,就不能做广告
127.0.0.1
和同一个端口多次,正如你所描述的。如果您使用的是docker swarm,那么代理将位于不同的主机上,因此端口可以是相同的,这就是规模操作真正有用的地方。否则,你会让一台机器做三倍于一个代理的工作,几乎得不到什么好处
如果您真的不想“重复您自己”,那么kubernetes helm图表将有助于模板化多个有状态服务
旁白:zookeeper容器不使用广告名称或任何以kafka开头的变量
您应该公布外部主机ip,而不是127.0.0.1