【问题标题】:Kafka broker fails to start in DockerKafka 代理无法在 Docker 中启动
【发布时间】:2021-10-06 21:18:50
【问题描述】:

我有一个非常标准的撰写文件。当我第一次运行它时,所有容器都运行良好。当我运行docker-compose -f kafka-compose.yml down 并再次运行时,我收到以下错误:

broker | [2021-10-06 09:57:13,398] ERROR Error while creating ephemeral at /brokers/ids/1, node already exists and owner '72075955082625025' does not match current session '72075962265632769' (kafka.zk.KafkaZkClient$CheckedEphemeral)

我没有在代理容器中找到server.properties。可能是这个原因吗?什么必须改变?

据我所知,这可能是由于并非所有设置都保留在已安装的文件夹中,因此它会在启动时重新加载。但是是哪一个?

这是我的 docker-compose 文件:

version: '3.3'


networks:
  default-dev-network:
    external: true

services:

  zookeeper:
    image: confluentinc/cp-zookeeper:6.2.0
    hostname: zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"
    volumes: 
      - $PWD/kafka-data/zookeeper/var-lib/data:/var/lib/zookeeper/data
      - $PWD/kafka-data/zookeeper/var-lib/log:/var/lib/zookeeper/log
      - $PWD/kafka-data/zookeeper/etc-kafka:/etc/kafka
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    networks:
      - default-dev-network

  broker:
    image: confluentinc/cp-kafka:6.2.0
    hostname: broker
    container_name: broker
    depends_on:
      - zookeeper
    ports:
      - "29092:29092"
      - "9092:9092"
      - "9101:9101"
    volumes:
      - $PWD/kafka-data/kafka/data:/var/lib/kafka/data
      - $PWD/kafka-data/kafka-home:/etc/kafka

    # entrypoint: sh -c 'sleep 30 && /etc/confluent/docker/run'

    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_JMX_PORT: 9101
      KAFKA_JMX_HOSTNAME: localhost
      KAFKA_LOG4J_LOGGERS: "org.apache.zookeeper=ERROR,\
org.apache.kafka=ERROR,\
kafka=ERROR,\
kafka.cluster=ERROR,\
kafka.controller=ERROR,\
kafka.coordinator=ERROR,\
kafka.log=ERROR,\
kafka.server=ERROR,\
kafka.zookeeper=ERROR,\
state.change.logger=ERROR"
      # KAFKA_LOG4J_LOGGERS: "kafka.controller=ERROR, kafka.coordinator=ERROR, state.change.logger=ERROR"
      KAFKA_LOG4J_ROOT_LOGLEVEL: ERROR
      KAFKA_TOOLS_LOG4J_LOGLEVEL: ERROR
    networks:
      - default-dev-network

  schema-registry:
    image: confluentinc/cp-schema-registry:6.2.0
    hostname: schema-registry
    container_name: schema-registry
    depends_on:
      - zookeeper
      - broker
    ports:
      - "8081:8081"
    environment:
      SCHEMA_REGISTRY_HOST_NAME: schema-registry
      SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: 'broker:29092'
    networks:
      - default-dev-network

  control-center:
    image: confluentinc/cp-enterprise-control-center:6.2.0
    hostname: control-center
    container_name: control-center
    depends_on:
      - zookeeper
      - broker
      - schema-registry
    ports:
      - "9021:9021"
    environment:
      CONTROL_CENTER_BOOTSTRAP_SERVERS: 'broker:29092'
      CONTROL_CENTER_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      CONTROL_CENTER_SCHEMA_REGISTRY_URL: "http://schema-registry:8081"
      CONTROL_CENTER_REPLICATION_FACTOR: 1
      CONTROL_CENTER_INTERNAL_TOPICS_PARTITIONS: 1
      CONTROL_CENTER_MONITORING_INTERCEPTOR_TOPIC_PARTITIONS: 1
      CONFLUENT_METRICS_TOPIC_REPLICATION: 1
      PORT: 9021
    networks:
      - default-dev-network

【问题讨论】:

    标签: docker apache-kafka


    【解决方案1】:

    是的,如果您没有在容器重新启动时删除卷数据,则此错误很常见

    在代理容器中找不到 server.properties

    它就在那里……

    ...
    Status: Downloaded newer image for confluentinc/cp-kafka:6.2.0
    sh-4.4$ ls /etc/kafka/
    connect-console-sink.properties    connect-mirror-maker.properties  secrets
    connect-console-source.properties  connect-standalone.properties    server.properties
    connect-distributed.properties     consumer.properties          tools-log4j.properties
    connect-file-sink.properties       kraft                trogdor.conf
    connect-file-source.properties     log4j.properties         zookeeper.properties
    connect-log4j.properties       producer.properties
    sh-4.4$ ls /etc/kafka/server.properties
    /etc/kafka/server.properties
    

    并非所有设置都保留在已安装的文件夹中,因此它会在启动时重新加载。但是是哪一个?

    它们是,但您得到的错误来自 Zookeeper 挂载,而不是 Kafka 的卷数据

    【讨论】:

    • 除了手动清理卷之外,还有一些常见的做法吗?
    • 因为它们只是主机目录,所以没有。
    • 所以这意味着我无法持久化kafka数据。如果我不挂载目录,kafka 将在容器重新创建后清理它。对吗?
    • 我以前可以为 Kafka 容器挂载卷,但我不记得是不是 Confluent 映像。但是,是的,它们将是短暂的
    猜你喜欢
    • 2023-03-16
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2021-12-12
    • 2020-09-07
    相关资源
    最近更新 更多