老实说,我从未使用过 bitnami 的图像,而且我很难理解如何使用 KSQLDB 图像。我很确定我正在做一些非常愚蠢的事情,因为我误解了一些非常基本的事情。
这是我的基本 docker-compose:
services:
ksqldb-server:
image: bitnami/ksql:latest
hostname: ksqldb-server
container_name: ksqldb-server
ports:
- "8088:8088"
volumes:
- "./ksql-server.properties:/opt/bitnami/ksql/config/ksql-server.properties"
environment:
# KSQL
KSQL_LISTENERS: http://0.0.0.0:8088
KSQL_BOOTSTRAP_SERVERS: my-remote-server:9092
KSQL_MOUNTED_CONF_DIR: "/opt/bitnami/ksql/config"
ksqldb-cli:
image: confluentinc/ksqldb-cli:0.29.0
container_name: ksqldb-cli
depends_on:
- ksqldb-server
entrypoint: /bin/sh
tty: true
我的目标是在 BITNAMI 文档中设置这几个 ENVS,然后通过 conf 文件设置其他的。我想保留所有其他的默认值。
这是我的配置文件:
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="usernameXXX" password="passwordXXX";
ssl.endpoint.identification.algorithm=HTTPS
ksql.internal.topic.replicas=3
ksql.sink.replicas=3
ksql.streams.replication.factor=3
ksql.logging.processing.topic.replication.factor=3
ksql.logging.processing.stream.auto.create=true
ksql.logging.processing.topic.auto.create=true
ksql.log4j.root.loglevel=DEBUG
由于 bitname 使用用户 1001,所以我这样做
chown -R 1001:1001 ksql-server.properties
。
当我启动此程序时,我得到:
ksqldb-server | ksql 09:04:32.27 INFO ==>
ksqldb-server | ksql 09:04:32.28 INFO ==> ** Starting KSQL setup **
ksqldb-server | ksql 09:04:32.30 INFO ==> Validating settings in KSQL_* env vars
ksqldb-server | ksql 09:04:32.33 INFO ==> Initializing Confluent KSQL
ksqldb-server | ksql 09:04:32.34 INFO ==> Injected configuration file found. Skipping default configuration
ksqldb-server | ksql 09:04:32.34 INFO ==> Waiting for Kafka brokers to be up
ksqldb-server exited with code 1
我还尝试删除:
KSQL_MOUNTED_CONF_DIR: "/opt/bitnami/ksql/config"
并设置:
volumes:
- "./ksql-server.properties:/opt/bitnami/ksql/etc/ksqldb/ksql-server.properties"
没有任何变化,仍在检测注入的配置,没有调试日志。
如果我完全删除卷(没有配置文件),我会收到“使用默认值未检测到配置”,然后 Kafka 端点上出现明显错误。
我最初的猜测是,当您不提供
/opt/bitnami/ksql/etc/ksqldb
时,KSQL_MOUNTED_CONF_DIR
文件夹用于创建默认文件。尽管如此,即使替换该文件夹中的文件也会创建一个“找到注入的配置文件”日志,所以我不知道这是如何工作的。
此外,用
docker run -it bitnami/ksql /bin/bash
查看该文件夹,我看到了很多模板。特别是一个叫做 ksqldb-server.properties.template
,里面有:
{% set kr_props = env_to_props('KSQL_', '') -%}
{% for name, value in kr_props.items() -%}
{{name}}={{value}}
{% endfor -%}
这似乎是 docker 镜像 confluenceinc/ksqldb-server 中使用的方法,这将是我最喜欢的配置方式。我尝试过(不希望添加其他未在 bitnami 的非常小的文档中编写的 ENVS,如下所示:
KSQL_SASL_JAAS_CONFIG: >
org.apache.kafka.common.security.plain.PlainLoginModule required
username="usernameXXX"
password="passwordXXX";
KSQL_SECURITY_PROTOCOL: SASL_SSL
KSQL_SASL_MECHANISM: PLAIN
KSQL_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM: "HTTPS"
同样的错误。
简而言之:
据我了解,您可以使用配置文件中的环境变量,也可以在
docker-compose.yml
中指定它们。我尝试启动你的 docker-compose,但遇到了这个问题:
ksqldb-server | ksql 16:48:59.81 INFO ==> ** Starting KSQL setup **
ksqldb-server | ksql 16:48:59.86 INFO ==> Validating settings in KSQL_* env vars
ksqldb-server | ksql 16:48:59.89 INFO ==> Initializing Confluent KSQL
ksqldb-server | ksql 16:48:59.92 INFO ==> No injected configuration files found, creating default config file.
ksqldb-server | grep: /opt/bitnami/ksql/etc/ksqldb/ksql-server.properties: Is a directory
ksqldb-server | /opt/bitnami/scripts/libksql.sh: line 158: /opt/bitnami/ksql/etc/ksqldb/ksql-server.properties: Is a directory
ksqldb-server exited with code 1
我通过 docker-compose 添加了环境变量,之后它就起作用了
services:
ksqldb-server:
image: bitnami/ksql:latest
hostname: ksqldb-server
container_name: ksqldb-server
ports:
- "8088:8088"
volumes:
- "./ksql-server.properties:/opt/bitnami/ksql/config/ksql-server.properties"
environment:
# KSQL
KSQL_LISTENERS: http://0.0.0.0:8088
KSQL_BOOTSTRAP_SERVERS: my-remote-server:9092
KSQL_SECURITY_PROTOCOL: SASL_SSL
KSQL_SASL_MECHANISM: PLAIN
KSQL_SASL_JAAS_CONFIG: 'org.apache.kafka.common.security.plain.PlainLoginModule required username="usernameXXX" password="passwordXXX";'
KSQL_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM: "HTTPS"
KSQL_INTERNAL_TOPIC_REPLICAS: 3
KSQL_SINK_REPLICAS: 3
KSQL_STREAMS_REPLICATION_FACTOR: 3
KSQL_LOGGING_PROCESSING_TOPIC_REPLICATION_FACTOR: 3
KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: true
KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: true
KSQL_LOG4J_ROOT_LOGLEVEL: DEBUG
ksqldb-cli:
image: confluentinc/ksqldb-cli:0.29.0
container_name: ksqldb-cli
depends_on:
- ksqldb-server
entrypoint: /bin/sh
tty: true
这是输出:
ksqldb-server | ksql 16:52:07.73 INFO ==>
ksqldb-server | ksql 16:52:07.73 INFO ==> Welcome to the Bitnami ksql container
ksqldb-server | ksql 16:52:07.73 INFO ==> Subscribe to project updates by watching https://github.com/bitnami/containers
ksqldb-server | ksql 16:52:07.74 INFO ==> Submit issues and feature requests at https://github.com/bitnami/containers/issues
ksqldb-server | ksql 16:52:07.74 INFO ==> Upgrade to Tanzu Application Catalog for production environments to access custom-configured and pre-packaged software components. Gain enhanced features, including Software Bill of Materials (SBOM), CVE scan result reports, and VEX documents. To learn more, visit https://bitnami.com/enterprise
ksqldb-server | ksql 16:52:07.74 INFO ==>
ksqldb-server | ksql 16:52:07.75 INFO ==> ** Starting KSQL setup **
ksqldb-server | ksql 16:52:07.76 INFO ==> Validating settings in KSQL_* env vars
ksqldb-server | ksql 16:52:07.80 INFO ==> Initializing Confluent KSQL
ksqldb-server | ksql 16:52:07.81 INFO ==> No injected configuration files found, creating default config file.
ksqldb-server | ksql 16:52:07.84 INFO ==> Waiting for Kafka brokers to be up
ksqldb-server |
ksqldb-server | ksql 16:52:07.85 INFO ==> ** KSQL setup finished! **
ksqldb-server | ksql 16:52:07.86 INFO ==> ** Starting KSQL **
我已经检查了容器内的变量。
docker-compose.yml
中指定的所有变量均已成功注入。