【问题标题】:Kafka Streams in docker-compose takes long time for partition assignmentdocker-compose 中的 Kafka Streams 需要很长时间进行分区分配
【发布时间】:2018-06-15 12:10:57
【问题描述】:

我正在 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:

【问题讨论】:

  • 请提供您的 docker-compose 文件。

标签: docker apache-kafka docker-compose apache-kafka-streams


【解决方案1】:

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

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

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

【讨论】:

  • 我遇到了同样的问题,上面的方法对我有用:1 个带有 zookeper 的 docker-compose 文件,3 个 kafka 节点,1 个 Kafa Stream,当集群尚未准备好时正在运行。集成测试运行了 5 分钟。我设法使用属性配置 KStream:“metadata.max.age.ms”= 500。谢谢分享
猜你喜欢
  • 2012-07-17
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
相关资源
最近更新 更多