使用Debezium 2.5注册Informix连接器时遇NoClassDefFoundError求助
Debezium 2.5 + Informix连接器启动失败:NoClassDefFoundError排查
问题概述
使用Debezium 2.5 Final版本,通过自定义Dockerfile引入Informix驱动及Confluent相关Avro依赖,docker-compose配置了AvroConverter等参数,但注册Informix源连接器时触发错误:java.lang.NoClassDefFoundError: io/confluent/connect/schema/AbstractDataConfig。
环境配置
Dockerfile
# https://packages.confluent.io/maven/io/confluent/ ARG DEBEZIUM_VERSION FROM quay.io/debezium/connect:$DEBEZIUM_VERSION #FROM quay.io/debezium/connect-base:$DEBEZIUM_VERSION ARG KAFKA_VERSION RUN echo ${KAFKA_VERSION} ADD --chown=kafka:kafka --chmod=775 https://repo1.maven.org/maven2/com/ibm/informix/jdbc/4.50.10/jdbc-4.50.10.jar /kafka/connect/debezium-connector-informix/ ADD --chown=kafka:kafka --chmod=775 https://repo1.maven.org/maven2/com/ibm/informix/ifx-changestream-client/1.1.3/ifx-changestream-client-1.1.3.jar /kafka/connect/debezium-connector-informix/ ADD --chown=kafka:kafka --chmod=775 https://packages.confluent.io/maven/io/confluent/kafka-connect-avro-converter/${KAFKA_VERSION}/kafka-connect-avro-converter-${KAFKA_VERSION}.jar /kafka/connect/kafka-connect-avro-converter/ ADD --chown=kafka:kafka --chmod=775 https://packages.confluent.io/maven/io/confluent/kafka-connect-avro-data/${KAFKA_VERSION}/kafka-connect-avro-data-${KAFKA_VERSION}.jar /kafka/connect/kafka-connect-avro-data/ ADD --chown=kafka:kafka --chmod=775 https://packages.confluent.io/maven/io/confluent/kafka-avro-serializer/${KAFKA_VERSION}/kafka-avro-serializer-${KAFKA_VERSION}.jar /kafka/connect/kafka-avro-serializer/ ADD --chown=kafka:kafka --chmod=775 https://packages.confluent.io/maven/io/confluent/kafka-schema-serializer/${KAFKA_VERSION}/kafka-schema-serializer-${KAFKA_VERSION}.jar /kafka/connect/kafka-schema-serializer/ ADD --chown=kafka:kafka --chmod=775 https://packages.confluent.io/maven/io/confluent/kafka-schema-registry-client/${KAFKA_VERSION}/kafka-schema-registry-client-${KAFKA_VERSION}.jar /kafka/connect/kafka-schema-registry-client/ ADD --chown=kafka:kafka --chmod=775 https://packages.confluent.io/maven/io/confluent/common-config/${KAFKA_VERSION}/common-config-${KAFKA_VERSION}.jar /kafka/connect/common-config/ ADD --chown=kafka:kafka --chmod=775 https://packages.confluent.io/maven/io/confluent/common-utils/${KAFKA_VERSION}/common-utils-${KAFKA_VERSION}.jar /kafka/connect/common-utils/ ADD --chown=kafka:kafka --chmod=775 https://repo1.maven.org/maven2/org/apache/avro/avro/1.11.3/avro-1.11.3.jar /kafka/connect/avro/ ADD --chown=kafka:kafka --chmod=775 https://repo1.maven.org/maven2/com/google/guava/guava/33.0.0-jre/guava-33.0.0-jre.jar /kafka/connect/guava/
docker-compose.yml
connect: image: debezium/connect-ifx:${DEBEZIUM_VERSION} container_name: connect build: context: ./debezium-ifx-init/ifxconnect args: DEBEZIUM_VERSION: ${DEBEZIUM_VERSION} KAFKA_VERSION: ${KAFKA_VERSION} ports: - 8083:8083 depends_on: - kafka - informix - schema-registry environment: GROUP_ID: 1 # Kafka config CONFIG_STORAGE_TOPIC: my_connect_configs OFFSET_STORAGE_TOPIC: my_connect_offsets STATUS_STORAGE_TOPIC: my_connect_statuses BOOTSTRAP_SERVERS: kafka:9092 # Avro config KEY_CONVERTER: io.confluent.connect.avro.AvroConverter VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8081 CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8081 KAFKA_CONNECT_PLUGINS_DIR: /kafka/connect CLASSPATH: /kafka/connect/kafka-connect-avro-converter/*:/kafka/connect/kafka-connect-avro-data/*:/kafka/connect/kafka-avro-serializer/*:/kafka/connect/kafka-schema-serializer/*:/kafka/connect/kafka-schema-registry-client/*:/kafka/connect/common-config/*:/kafka/connect/common-utils/*:/kafka/connect/avro/*:/kafka/connect/guava/* volumes: - ./data/connect/data:/var/lib/kafka/data
连接器配置
{ "name": "source-testdb-ifx", "config": { "connector.class" : "io.debezium.connector.informix.InformixConnector", "tasks.max" : "1", "topic.prefix" : "ifxserver", "database.hostname" : "informix", "database.port" : "9088", "database.user" : "informix", "database.password" : "in4mix", "database.dbname" : "testdb", "schema.history.internal.kafka.bootstrap.servers" : "kafka:9092", "schema.history.internal.kafka.topic": "schema-changes.testdb", "key.converter": "io.confluent.connect.avro.AvroConverter", "key.converter.schema.registry.url": "http://schema-registry:8081", "value.converter": "io.confluent.connect.avro.AvroConverter", "value.converter.schema.registry.url": "http://schema-registry:8081" } }
错误信息
ERROR || Failed to start task source-testdb-ifx-0 [org.apache.kafka.connect.runtime.Worker] java.lang.NoClassDefFoundError: io/confluent/connect/schema/AbstractDataConfig
排查与解决
1. 补全缺失的依赖包
io/confluent/connect/schema/AbstractDataConfig类属于kafka-connect-schema包,当前Dockerfile未引入该依赖。需在Dockerfile中添加对应版本的jar包:
# 添加缺失的kafka-connect-schema依赖 ADD --chown=kafka:kafka --chmod=775 https://packages.confluent.io/maven/io/confluent/kafka-connect-schema/${KAFKA_VERSION}/kafka-connect-schema-${KAFKA_VERSION}.jar /kafka/connect/kafka-connect-schema/
同时更新docker-compose中的CLASSPATH,新增该目录:
CLASSPATH: ...:/kafka/connect/kafka-connect-schema/*
2. 验证版本兼容性
Debezium 2.5对应Kafka版本为3.5.x,需确保Confluent所有依赖版本与Kafka版本匹配(如Confluent 7.5.x对应Kafka 3.5.x),避免因版本不兼容导致的类加载问题。
3. 优化类路径配置
将所有Confluent相关依赖统一放到同一个目录(如/kafka/connect/confluent-all/),简化CLASSPATH配置,减少路径遗漏风险:
# 统一存放Confluent依赖 RUN mkdir -p /kafka/connect/confluent-all/ ADD --chown=kafka:kafka --chmod=775 https://packages.confluent.io/maven/io/confluent/kafka-connect-avro-converter/${KAFKA_VERSION}/kafka-connect-avro-converter-${KAFKA_VERSION}.jar /kafka/connect/confluent-all/ ADD --chown=kafka:kafka --chmod=775 https://packages.confluent.io/maven/io/confluent/kafka-connect-avro-data/${KAFKA_VERSION}/kafka-connect-avro-data-${KAFKA_VERSION}.jar /kafka/connect/confluent-all/ # 其他Confluent依赖同理,包括新增的kafka-connect-schema
对应的CLASSPATH改为:
CLASSPATH: /kafka/connect/confluent-all/*:/kafka/connect/debezium-connector-informix/*:/kafka/connect/avro/*:/kafka/connect/guava/*
内容的提问来源于stack exchange,提问作者Maxi
相关产品推荐
相关产品推荐

