gpt4 book ai didi

apache-kafka - Docker环境启动分布式Kafka connect后创建Kafka connector

转载 作者:行者123 更新时间:2023-12-05 08:30:40 24 4
gpt4 key购买 nike

我正在尝试在执行 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

我有入口点脚本文件:

connect-distributed config/"${DEPLOY_ENV}"/connect-distributed.properties
curl -X POST -H "Content-Type: application/json" -d @config.json http://localhost:8083/connectors

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

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

简而言之,我想在 connect-distributed 启动后创建一个连接器,而不在容器外部执行任何 rest 请求。我该如何实现?

最佳答案

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

顺便说一句,你最好从 Kafka Connect 基础镜像开始

FROM confluentinc/cp-kafka-connect-base:5.5.0

通常您会使用 Confluent Hub 来安装连接器,但 Couchbase 似乎不存在,因此您必须像之前那样复制到 JAR 中。

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

# Launch the worker
/etc/confluent/docker/run &

# Wait for it to start running
# Change the port here if not using the default
bash -c ' \
echo -e "\n\n=============\nWaiting for Kafka Connect to start listening on localhost ⏳\n=============\n"
while [ $(curl -s -o /dev/null -w %{http_code} http://localhost:8083/connectors) -ne 200 ] ; do
echo -e "\t" $(date) " Kafka Connect listener HTTP state: " $(curl -s -o /dev/null -w %{http_code} http://localhost:8083/connectors) " (waiting for 200)"
sleep 5
done
echo -e $(date) "\n\n--------------\n\o/ Kafka Connect is ready! Listener HTTP state: " $(curl -s -o /dev/null -w %{http_code} http://localhost:8083/connectors) "\n--------------\n"

# Now create your connector
## Inline config example:
curl -i -X PUT -H "Content-Type:application/json" http://localhost:8083/connectors/sink-file-jsonschema-as-json/config \
-d '{
"connector.class": "org.apache.kafka.connect.file.FileStreamSinkConnector",
"key.converter": "org.apache.kafka.connect.storage.StringConverter",
"value.converter": "org.apache.kafka.connect.json.JsonConverter",
"tasks.max": 1,
"file": "/jsonschema-as-json.txt",
"topics": "test-jsonschema"
}'
## External file example:
curl -X POST -H "Content-Type: application/json" -d @config.json http://localhost:8083/connectors

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

关于apache-kafka - Docker环境启动分布式Kafka connect后创建Kafka connector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62715790/

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