我想创建一个可伸缩的kafka集群,但每个kafka实例都需要一个唯一的代理ID。确保这一点的好方法是什么?
您可以在下面找到我用于部署我的应用程序的撰写文件。我正在使用docker stack deploy --compose-file docker-compose.yml mystack
将其部署到我的docker swarm。目前,代理ID设置为1,但是当我将kafka实例的数量从1增加到2时,这将无效。 docker service scale <KAFKA-SERVICE-ID>=2
,这就是我要解决的问题。
---
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 22181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: localhost:22888:23888
network_mode: host
extra_hosts:
- "moby:127.0.0.1"
kafka:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:22181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:19092
extra_hosts:
- "moby:127.0.0.1"
答案 0 :(得分:2)
事实证明,默认情况下,如果你没有为kafka分配一个经纪人ID,那么zookeeper会自动为kafka分配一个唯一的经纪人ID。因此,您可以安全地扩展或降低kafka服务,而无需考虑您自己的经纪人ID管理。有关详细信息,请参阅http://kafka.apache.org/090/documentation.html(搜索&#34; zookeeper序列从MaxReservedBrokerId + 1&#34开始;对于表中的相关行)。默认情况下,MaxReservedBrokerId为1000,因此您的第一个自动分配的代理ID将为1001,并且当您添加其他kafka容器时,zookeeper将按顺序分配。所以你的第二个kafka容器的经纪人ID为1002等。
答案 1 :(得分:0)
很好回答你的问题..你是否尝试使用环境变量......就像这样
$arr = array (
'class_name' => array (1,2),
'zone1_price' => array ('a','s' ),
'zone2_price' => array ('b', 't' ),
'zone3_price' => array ('c', 'u' ),
'zone4_price' => array ('d', 'v' )
);
$newarray = [];
foreach($arr as $key => $val){
$newarray[$key] = $val[0];
}
注意针对KAFKA_BROKER_ID执行的替换,如果服务在同一节点上缩放,您可能还会遇到端口问题,但这是一个不同的问题需要解决。
因此,在扩展之前,只需将变量的值更改为某个不同的值,您也可以将其编写为脚本。
有关此内容的更多信息,请访问https://docs.docker.com/compose/environment-variables/#the-env-file
服务启动后,您可以在控制台日志中看到代理ID
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 22181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: localhost:22888:23888
network_mode: host
extra_hosts:
- "moby:127.0.0.1"
kafka:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: ${TAG}
KAFKA_ZOOKEEPER_CONNECT: zookeeper:22181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:19092
extra_hosts:
- "moby:127.0.0.1"