我想创建一个可伸缩的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"
最佳答案
事实证明,默认情况下,如果不为kafka分配经纪人ID,zookeeper将自动为kafka分配唯一的经纪人ID。因此,您可以安全地向上或向下扩展kafka服务,而不必担心经纪人ID的管理。有关更多信息,请参见http://kafka.apache.org/090/documentation.html(对于表中的相关行,搜索“zookeeper序列从MaxReservedBrokerId + 1开始”)。默认情况下,MaxReservedBrokerId为1000,因此您的第一个自动分配的代理ID为1001,并且在添加其他kafka容器时,zookeeper将按顺序分配。因此,您的第二个kafka容器的经纪人ID为1002,依此类推。
关于docker - 如何在docker kafka服务中确保唯一的经纪人ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48833006/