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

10-16 23:54