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