有没有办法在Kafka Connect启动时自动加载(多个(Kafka Connect连接器(例如在Confluent Platform中(?
到目前为止,我发现了什么:
使用bin/connect-standalone
的 Confluent 文档状态独立模式的命令,其中包含辅助角色和每个连接器的属性文件。
对于分布式模式,必须通过 REST API 运行连接器。
https://docs.confluent.io/current/connect/userguide.html#standalone-mode, https://docs.confluent.io/current/connect/managing/configuring.html#standalone-example
有没有另一种方法,例如,包含应该在"connect-[standalone|distributed].properties"文件中运行的所有连接器(类似于在ksql-server.properties中提供KSQL查询文件(,以便在Kafka Connect启动时自动加载它们(例如在Confluent平台中(?
或者连接器是否如上文所述"手动"加载,即使在生产环境中也是如此?
通常,在分布式模式下运行Kafka Connect时,您必须使用REST API。但是,您可以使用 docker 撰写来编写创建连接器的脚本;@Robin Moffatt为此写了一篇很好的文章:
kafka-connect:
image: confluentinc/cp-kafka-connect:5.1.2
environment:
CONNECT_REST_PORT: 18083
CONNECT_REST_ADVERTISED_HOST_NAME: "kafka-connect"
[…]
volumes:
- $PWD/scripts:/scripts
command:
- bash
- -c
- |
/etc/confluent/docker/run &
echo "Waiting for Kafka Connect to start listening on kafka-connect ⏳"
while [ $$(curl -s -o /dev/null -w %{http_code} http://kafka-connect:8083/connectors) -eq 000 ] ; do
echo -e $$(date) " Kafka Connect listener HTTP state: " $$(curl -s -o /dev/null -w %{http_code} http://kafka-connect:8083/connectors) " (waiting for 200)"
sleep 5
done
nc -vz kafka-connect 8083
echo -e "n--n+> Creating Kafka Connect Elasticsearch sink"
/scripts/create-es-sink.sh
sleep infinity
笔记:
在命令部分中,
$
替换为$$
以避免错误 "命令"选项的插值格式无效
sleep infinity
是 必要,因为我们已将/etc/confluent/docker/run
流程发送到 一个后台线程(&
(,所以容器将退出,如果主command
结束。用于配置连接器的实际脚本是
curl
单独的文件中调用。你可以把它构建到Docker中 作曲,但感觉有点恶心。您可以将此和 上面的技术,如果您想安装自定义连接器插件 在启动 Kafka Connect 之前,例如
confluent-hub install --no-prompt confluentinc/kafka-connect-gcs:5.0.0 /etc/confluent/docker/run