我正在运行一个 Strimzi
KafkaConnect
集群,它加载自定义 transformer
以将 SMT 应用于我们的消息。 .jar
位于图像内并由 Strimzi KafkaConnect 集群加载(出现在日志中):
Dockerfile 行:
FROM quay.io/strimzi/kafka:0.29.0-kafka-3.0.1
USER root:root
RUN mkdir -p /opt/kafka/plugins
COPY --from=unpacker /unpack/kafka-connect-aws-s3 /opt/kafka/plugins #this is the lenses.io connector and works fine
COPY ./<FILE>.jar /opt/kafka/plugins #<FILE>.jar is downloaded locally by pipeline.
USER 1001
(我在
/opt/kafka/plugins
目录中也有一个连接器,并且由 KafkaConnect 很好地拾取)
我看到的错误是:
Message: PUT /connectors/<NAME>/config returned 400 (Bad Request): Connector configuration is invalid and contains the following 2 error(s):
Invalid value <CLASS> for configuration transforms.<NAME>.type: Class <CLASS> could not be found.
Invalid value null for configuration transforms.<NAME>.type: Not a Transformation
但是,当我检查图像本身时,文件在那里并且类似乎在那里:
unzip -l /opt/kafka/plugins/<FILE>.jar | grep <CLASS>
1333 07-31-2023 09:49 <CLASS>$Companion.class
7990 07-31-2023 09:49 <CLASS>.class
Strimzi KafkaConnect 日志:
k logs kafka-topics-backup-aws-connect-9f564bdcb-5qnp6 | grep <FILE>.jar
2023-08-30 13:51:49,301 INFO Loading plugin from: /opt/kafka/plugins/<FILE>.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader) [main]
2023-08-30 13:51:49,973 INFO Registered loader: PluginClassLoader{pluginLocation=file:/opt/kafka/plugins/<FILE>.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader) [main]
YAML
KafkaConnectors
的相关部分:
spec:
class: io.lenses.streamreactor.connect.aws.s3.sink.S3SinkConnector
tasksMax: 1
config:
topics: "<NAME>"
connect.s3.kcql: <KCQL_STRING>
connect.s3.padding.strategy: LeftPad
connect.s3.padding.length: 8
connect.s3.vhost.bucket: true
transforms: "<NAME>"
transforms.<NAME>.type: "<CLASS>"
我期望当我使用上面的转换创建
KafkaConnectors
时,它们会加载类并工作。
我遇到的问题是我使用的是 Strimzi 0.29.0(带有 Kafka 3.0.1),而 Transformer 是用 Java17 构建的。当我将 Transformer 更改为 Java11 后,KafkaConnect 就找到了它并使用了