可以通过启动时传递的环境变量配置 kafka 连接器 docker 吗?或者卷曲是唯一的方法?
Can the kafka connectors be configured via env variables passed when launching docker? Or curl is the only way?
这是我们用来托管 docker- 与插件连接的 docker 图像
FROM confluentinc/cp-kafka-connect:5.3.1
ENV CONNECT_PLUGIN_PATH=/usr/share/java
# JDBC-MariaDB
RUN wget -nv -P /usr/share/java/kafka-connect-jdbc/ https://downloads.mariadb.com/Connectors/java/connector-java-2.4.4/mariadb-java-client-2.4.4.jar
# SNMP Source
RUN wget -nv -P /tmp/ https://github.com/name/kafka-connect-snmp/releases/download/0.0.1.11/kafka-connect-snmp-0.0.1.11.tar.gz
RUN mkdir /tmp/kafka-connect-snmp && tar -xf /tmp/kafka-connect-snmp-0.0.1.11.tar.gz -C /tmp/kafka-connect-snmp/
RUN mv /tmp/kafka-connect-snmp/usr/share/kafka-connect/kafka-connect-snmp /usr/share/java/
我 运行 这个 docker 通过 docker-compose 然后我指定了一些在这里定义的常见环境变量 https://docs.confluent.io/current/installation/docker/config-reference.html#kafka-connect-configuration
但我也想从 env 变量中指定与连接器相关的配置,例如我已经这样做了
- CONNECT_NAME=snmp-connector
- CONNECT_CONNECTOR_CLASS=com.github.jcustenborder.kafka.connect.snmp.SnmpTrapSourceConnector
- CONNECT_TOPIC=fm_snmp
我想做什么,而不是调用
curl -X POST -H "Content-Type: application/json" --data '{"name":"","config":{"connector.class":"com.github.jcustenborder.kafka.connect.snmp.SnmpTrapSourceConnector","topic":"fm_snmp"}}' http://localhost:8083/connectors
我只想通过环境变量指定它,但是!!不幸的是它不工作。因此,当我尝试查看活动连接器列表 curl -localhost:8083/connectors/ 时,我没有看到它列在那里。
所以最后,我的问题是我可以通过 env 变量配置它还是只能使用 curl?
您不能将其作为环境变量传递,但您可以通过传入自定义命令将其指定为 Docker 启动的一部分。这是使用 Docker Compose 执行此操作的示例。如果您调用 docker run
本身,则需要将其重新设计为适当的结构:
kafka-connect:
image: confluentinc/cp-kafka-connect:5.3.1
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
这会调用一个连接器脚本,但如果您想直接嵌入它,您可以这样做like this。
这是我们用来托管 docker- 与插件连接的 docker 图像
FROM confluentinc/cp-kafka-connect:5.3.1
ENV CONNECT_PLUGIN_PATH=/usr/share/java
# JDBC-MariaDB
RUN wget -nv -P /usr/share/java/kafka-connect-jdbc/ https://downloads.mariadb.com/Connectors/java/connector-java-2.4.4/mariadb-java-client-2.4.4.jar
# SNMP Source
RUN wget -nv -P /tmp/ https://github.com/name/kafka-connect-snmp/releases/download/0.0.1.11/kafka-connect-snmp-0.0.1.11.tar.gz
RUN mkdir /tmp/kafka-connect-snmp && tar -xf /tmp/kafka-connect-snmp-0.0.1.11.tar.gz -C /tmp/kafka-connect-snmp/
RUN mv /tmp/kafka-connect-snmp/usr/share/kafka-connect/kafka-connect-snmp /usr/share/java/
我 运行 这个 docker 通过 docker-compose 然后我指定了一些在这里定义的常见环境变量 https://docs.confluent.io/current/installation/docker/config-reference.html#kafka-connect-configuration
但我也想从 env 变量中指定与连接器相关的配置,例如我已经这样做了
- CONNECT_NAME=snmp-connector
- CONNECT_CONNECTOR_CLASS=com.github.jcustenborder.kafka.connect.snmp.SnmpTrapSourceConnector
- CONNECT_TOPIC=fm_snmp
我想做什么,而不是调用
curl -X POST -H "Content-Type: application/json" --data '{"name":"","config":{"connector.class":"com.github.jcustenborder.kafka.connect.snmp.SnmpTrapSourceConnector","topic":"fm_snmp"}}' http://localhost:8083/connectors
我只想通过环境变量指定它,但是!!不幸的是它不工作。因此,当我尝试查看活动连接器列表 curl -localhost:8083/connectors/ 时,我没有看到它列在那里。
所以最后,我的问题是我可以通过 env 变量配置它还是只能使用 curl?
您不能将其作为环境变量传递,但您可以通过传入自定义命令将其指定为 Docker 启动的一部分。这是使用 Docker Compose 执行此操作的示例。如果您调用 docker run
本身,则需要将其重新设计为适当的结构:
kafka-connect:
image: confluentinc/cp-kafka-connect:5.3.1
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
这会调用一个连接器脚本,但如果您想直接嵌入它,您可以这样做like this。