gpt4 book ai didi

docker - docker-compose 中的 Kafka Streams 需要很长时间进行分区分配

转载 作者:行者123 更新时间:2023-12-01 00:21:53 27 4
gpt4 key购买 nike

我正在 docker 容器中运行 Kafka 流应用程序。出于测试目的,我有一个 docker-compose 文件,用于运行流应用程序、kafka 的单个实例和 zookeeper。 kafka 和 zookeeper 的配置以前都有效。

为 kafka 流应用程序分配分区需要 5 分钟以上的时间。如果我延迟运行流容器直到 kafka 和 zookeeper 启动,并且流应用程序正在使用的主题已正确实例化,那么它几乎立即获得分配的分区。

似乎 kafka 流组正在被实例化,但是,应用程序没有分配任何分区。这大概是因为该主题尚未完全实例化。它直到下一代才分配分区,这似乎几乎需要 5 分钟。

根据我对情况的(有限的)理解,我有一些减少这种延迟的选择:

  • 在启动流应用程序之前检查主题是否具有元数据
  • 减少世代之间的间隔(看起来这可能会在生产中出现问题,但可能适合测试)

  • 但是,我意识到考虑到我在这方面的知识有限,我可能会遗漏一些明显的东西。

    编辑:docker-compose 文件以供引用
    version: 3.3
    services:
    kafka-stream-ingestor:
    build:
    context: .
    dockerfile: Dockerfile
    args:
    - version

    networks:
    - services

    zookeeper:
    image: wurstmeister/zookeeper
    ports:
    - 2181:2181
    networks:
    - services

    kafka:
    image: wurstmeister/kafka:latest
    ports:
    - 9094:9094
    - 9092:9092
    environment:
    KAFKA_ADVERTISED_HOST_NAME: ${DOCKER_KAFKA_HOST}
    KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
    KAFKA_ADVERTISED_PROTOCOL_NAME: OUTSIDE
    KAFKA_ADVERTISED_PORT: 9094
    KAFKA_CREATE_TOPICS: "kafka-queue:12:1"
    KAFKA_PROTOCOL_NAME: INSIDE
    KAFKA_PORT: 9092
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    networks:
    - services

    networks:
    services:

    volumes:
    testresult:

    最佳答案

    我找到了一个可以在有限情况下工作的临时解决方案(仅在本地测试或通过集成测试时需要)。我不会将此标记为已解决以提供更好的答案。

    本质上,流应用程序在分区准备好之前要求提供元数据。 kafka 说“还没有分区”,应用程序说“好吧,没有要分配的分区”,然后等待(可配置的)时间,直到分区元数据变得陈旧。然后它向 kafka 发出另一个请求,此时它已经创建了分区。

    规定此刷新间隔的配置是 kafka.metadata.max.age.ms .我将其设置为 1000 毫秒。

    关于docker - docker-compose 中的 Kafka Streams 需要很长时间进行分区分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117696/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com