docker - 如何在docker kafka服务中确保唯一的经纪人ID

标签 docker apache-kafka docker-swarm

我想创建一个可伸缩的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/

相关文章:

mongodb - Docker的Spring Boot mongo异常

hadoop - 使用 camus 属性将纪元时间戳转换为日期时间格式

java - 如何停止@Bean注释的Kstream kafka消费者并继续运行spring-boot应用程序

websocket - 是否可以将 websocket 消息发送到 kafka 主题?

Jenkins Swarm 插件 - 具有随机字母数字值的从属名称

docker - 在 Swarm 模式下从 Docker 容器内部获取服务列表

docker - 在Docker Swarm模式下拥有更多副本有什么影响?

visual-studio - 如何使用 VSTS 通过 Docker 配置 ASPNET Core,以通过单元测试和环境变量构建、运行测试并部署到 Azure

docker - 无法使用 docker login --password-stdin

java - Maven 安装文件在 GitLab/Docker : "could not resolve dependencies for project" 中无效