在Docker环境中启动分布式Kafka连接后创建Kafka连接器

sar*_*rah 2 apache-kafka apache-kafka-connect

我试图在执行 connect-distributed 命令后创建一个 kafka 连接器。我写了一个 entrypoint.sh 脚本并将它与 CMD 一起使用。我有这样的 docker 文件:

FROM confluentinc/cp-kafka
RUN mkdir /plugins
RUN mkdir /config
COPY kafka-connect-couchbase-*.jar /plugins/
COPY config /config/
RUN chmod +x /config/stage/entrypoint.sh
ENV EXPOSED_PORT 8083
CMD /config/stage/entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

我有入口点脚本文件为:

connect-distributed config/"${DEPLOY_ENV}"/connect-distributed.properties
curl -X POST -H "Content-Type: application/json" -d @config.json http://localhost:8083/connectors
Run Code Online (Sandbox Code Playgroud)

deploy_env 无关紧要,它来自 jenkins。config 文件和distributed.properties 也无关紧要,它是正确的,我手动尝试过。

Kafka connect 启动没有问题,但是用于创建连接器的curl命令无效。

简而言之,我想在 connect-distributed 启动后创建一个连接器,而不在容器外执行任何休息请求。我如何做到这一点?

Rob*_*att 7

您需要确保您正在等待 Kafka Connect 工作器完全启动。

顺便说一句,您最好从 Kafka Connect 基本映像开始

FROM confluentinc/cp-kafka-connect-base:5.5.0
Run Code Online (Sandbox Code Playgroud)

通常你会使用 Confluent Hub 来安装连接器,但看起来 Couchbase 不存在,所以你必须像你所做的那样复制到 JAR 中。

在 Connect 镜像中启动 Kafka Connect 的实际脚本是/etc/confluent/docker/run,所以你/config/stage/entrypoint.sh应该看起来像这样:

FROM confluentinc/cp-kafka-connect-base:5.5.0
Run Code Online (Sandbox Code Playgroud)

另见https://rmoff.net/2018/12/15/docker-tips-and-tricks-with-ksql-and-kafka/