在Kafka Connect启动时(例如在Confluent Platform中),是否可以自动加载(多个)Kafka Connect连接器?
到目前为止我发现的东西:
融合文档说明要使用bin/connect-standalone
用于独立模式的命令,带有用于工作程序和每个单个连接器的属性文件。
对于分布式模式,您必须通过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平台中)?
或者即使在生产环境中,连接器是否也按上述方式“手动”装载?
答案 0 :(得分:2)
通常,在分布式模式下运行Kafka Connect时,您必须使用REST API。但是,您可以使用docker compose编写连接器创建脚本; @Robin Moffatt为此写了一个不错的article:
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