【问题标题】:Kafka connect doesn't find available brokers when volume attached附加卷时,Kafka connect 找不到可用的代理
【发布时间】:2020-05-28 10:55:07
【问题描述】:

症状:修改后的 bitnami kafka 图像包含 kafka-connect jar,它们工作正常。 但是一旦我为持久性添加了一个卷,它就找不到现有的代理。

详情: 我修改了 bitnami 图像以复制连接 jar 并启动 connect-distributed.sh。 它工作正常,连接器可以从/到主题消费和生产

但是一旦我将持久卷添加到 kafka 映像中,第一次启动就可以了,但接下来就不行了。 connect.log 说:

"[2020-05-21 15:59:34,786] ERROR [Worker clientId=connect-1, groupId=my-group1] Uncaught exception in herder work thread, exiting:  (org.apache.kafka.connect.runtime.distributed.DistributedHerder:297)
g.apache.kafka.common.KafkaException: Unexpected error fetching metadata for topic connect-offsets
        at org.apache.kafka.clients.consumer.internals.Fetcher.getTopicMetadata(Fetcher.java:403)
        at org.apache.kafka.clients.consumer.KafkaConsumer.partitionsFor(KafkaConsumer.java:1965)
        at org.apache.kafka.clients.consumer.KafkaConsumer.partitionsFor(KafkaConsumer.java:1933)
        at org.apache.kafka.connect.util.KafkaBasedLog.start(KafkaBasedLog.java:138)
        at org.apache.kafka.connect.storage.KafkaOffsetBackingStore.start(KafkaOffsetBackingStore.java:109)
        at org.apache.kafka.connect.runtime.Worker.start(Worker.java:186)
        at org.apache.kafka.connect.runtime.AbstractHerder.startServices(AbstractHerder.java:123)
        at org.apache.kafka.connect.runtime.distributed.DistributedHerder.run(DistributedHerder.java:284)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor is below 1 or larger than the number of available brokers." 

kafka 本身仍然运行良好,每个主题都存在(replfactor 为 1),我可以手动消费/生成消息。而且我还可以手动启动连接器系统成功。

编辑:我的猜测是,如果没有 PV,它将在 kafka 启动后启动连接器,但使用 PV 它会立即看到连接器已经存在并尝试在 kafka 启动之前加载它们。

edit2:
修改后的图像:

    FROM bitnami/kafka
    // copying connect jars..
    ADD connect-distributed.properties /opt/prop/connect-distributed.properties
    ADD modded-kafka-run.sh /opt/bitnami/scripts/kafka/run.sh
    RUN chmod 755 /opt/bitnami/scripts/kafka/run.sh

修改了run.sh(我刚刚添加了distributed.sh和curl):

    info "** Starting Kafka **"
    /opt/bitnami/kafka/bin/connect-distributed.sh -daemon /opt/prop/connect-distributed.properties
   //.. adding the connectors with curl
    if am_i_root; then
        exec gosu "$KAFKA_DAEMON_USER" "${START_COMMAND[@]}"
    else
        exec "${START_COMMAND[@]}"
    fi

原run.sh:https://github.com/bitnami/bitnami-docker-kafka/blob/master/2/debian-10/rootfs/opt/bitnami/scripts/kafka/run.sh

【问题讨论】:

  • 你能分享图片的细节吗?在不知道的情况下很难提供帮助。您可能还想查看hub.docker.com/r/confluentinc/cp-kafka-connect-base
  • @RobinMoffatt 我编辑了我的问题。我知道连接器存在分离的泊坞窗,但想在 kafka 图像本身中解决这个问题。
  • 所以你想在同一个容器中运行 Kafka Broker 和 Kafka Connect worker?
  • 是的,完全正确。我想在本地机器上以非容器化方式配置它
  • 如果这是您的目标,那么老实说,您最好使用简单的虚拟机 :-)

标签: apache-kafka apache-kafka-connect bitnami


【解决方案1】:

很难说问题出在哪里,但启动 Kafka 的 ENTRYPOINT 实际上是在任何 RUN 命令之后启动

不清楚为什么在at least two 存在时需要创建自己的Kafka Connect 映像

您应该使用 docker-compose 来启动 3 个独立的 Zookeeper、Kafka 和 Connect 集群

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 2021-05-16
    • 2019-09-16
    • 2019-04-24
    • 2019-12-09
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多