自定义Kafka Connect镜像状态UP(unhealthy)无法在Control Center正常显示
自定义Kafka Connect镜像容器Unhealthy问题排查
问题背景
基于confluentinc/cp-kafka-connect-base:latest构建包含apache-kafka-connect-plc4x-plc4j-0.10.0连接器的自定义镜像,替换docker-compose中的Connect镜像后,容器状态显示UP(unhealthy),Confluent Control Center无法使用连接器功能;使用官方标准镜像时一切正常。
相关配置
Dockerfile内容
FROM confluentinc/cp-kafka-connect-base:latest # Copy the PLC4X Connect adapter to the appropriate directory COPY apache-kafka-connect-plc4x-plc4j-0.10.0.zip /tmp/apache-kafka-connect-plc4x-plc4j-0.10.0.zip RUN confluent-hub install --no-prompt /tmp/apache-kafka-connect-plc4x-plc4j-0.10.0.zip
docker-compose.yml 核心配置
Broker服务
broker: image: confluentinc/cp-server:7.1.2 networks: - test-network hostname: broker container_name: broker depends_on: - zookeeper ports: - "9092:9092" - "9101:9101" - "29092:29092" - "29093:29093" environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_LISTENERS: EXTERNAL_SAME_HOST://:9092,EXTERNAL_DIFFERENT_HOST://:29093,INTERNAL://broker:29092 KAFKA_ADVERTISED_LISTENERS: INTERNAL://broker:29092,EXTERNAL_SAME_HOST://localhost:9092,EXTERNAL_DIFFERENT_HOST://157.245.80.232:29093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL_SAME_HOST:PLAINTEXT,EXTERNAL_DIFFERENT_HOST:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL KAFKA_METRIC_REPORTERS: io.confluent.metrics.reporter.ConfluentMetricsReporter KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_CONFLUENT_LICENSE_TOPIC_REPLICATION_FACTOR: 1 KAFKA_CONFLUENT_BALANCER_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_JMX_PORT: 9101 KAFKA_JMX_HOSTNAME: localhost KAFKA_CONFLUENT_SCHEMA_REGISTRY_URL: http://schema-registry:8081 CONFLUENT_METRICS_REPORTER_BOOTSTRAP_SERVERS: broker:29092 CONFLUENT_METRICS_REPORTER_TOPIC_REPLICAS: 1 CONFLUENT_METRICS_ENABLE: 'true' CONFLUENT_SUPPORT_CUSTOMER_ID: 'anonymous'
Connect服务
connect: #image: cnfldemos/cp-server-connect-datagen:0.5.3-7.1.0 image: connect-plc4x:1.2 networks: - test-network hostname: connect container_name: connect depends_on: - broker - schema-registry ports: - "8083:8083" environment: CONNECT_BOOTSTRAP_SERVERS: 'broker:29092' CONNECT_REST_ADVERTISED_HOST_NAME: connect CONNECT_GROUP_ID: compose-connect-group CONNECT_CONFIG_STORAGE_TOPIC: docker-connect-configs CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1 CONNECT_OFFSET_FLUSH_INTERVAL_MS: 10000 CONNECT_OFFSET_STORAGE_TOPIC: docker-connect-offsets CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1 CONNECT_STATUS_STORAGE_TOPIC: docker-connect-status CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1 CONNECT_KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8081 # CLASSPATH required due to CC-2422 CLASSPATH: /usr/share/java/monitoring-interceptors/monitoring-interceptors-7.1.2.jar CONNECT_PRODUCER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringProducerInterceptor" CONNECT_CONSUMER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringConsumerInterceptor" CONNECT_PLUGIN_PATH: /usr/share/java,/usr/share/confluent-hub-components CONNECT_LOG4J_LOGGERS: org.apache.zookeeper=ERROR,org.I0Itec.zkclient=ERROR,org.reflections=ERROR
Control Center服务
control-center: image: confluentinc/cp-enterprise-control-center:7.3.2 hostname: control-center container_name: control-center depends_on: - broker - schema-registry - connect - ksqldb-server ports: - "9021:9021" environment: CONTROL_CENTER_BOOTSTRAP_SERVERS: 'broker:29092' CONTROL_CENTER_CONNECT_CONNECT-DEFAULT_CLUSTER: 'http://connect:8083' CONTROL_CENTER_KSQL_KSQLDB1_URL: "http://ksqldb-server:8088" CONTROL_CENTER_KSQL_KSQLDB1_ADVERTISED_URL: "http://localhost:8088" CONTROL_CENTER_SCHEMA_REGISTRY_URL: "http://schema-registry:8081" CONTROL_CENTER_REPLICATION_FACTOR: 1 CONTROL_CENTER_INTERNAL_TOPICS_PARTITIONS: 1 CONTROL_CENTER_MONITORING_INTERCEPTOR_TOPIC_PARTITIONS: 1 CONTROL_CENTER_CONNECT_HEALTHCHECK_ENDPOINT: '/connectors' CONFLUENT_METRICS_TOPIC_REPLICATION: 1 PORT: 9021
排查思路与解决建议
- 优先查看Connect容器日志:执行
docker logs connect,重点排查启动阶段的报错,比如插件加载失败、依赖缺失、配置冲突等信息。 - 验证镜像构建有效性:
- 进入容器:
docker exec -it connect bash,检查/usr/share/confluent-hub-components目录下是否存在PLC4X连接器的完整文件。 - 回顾镜像构建日志,确认
confluent-hub install命令是否执行成功,无报错信息。
- 进入容器:
- 补充健康检查配置:官方标准镜像自带健康检查逻辑,自定义镜像需显式配置。在Connect服务中添加:
healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8083/connectors"] interval: 30s timeout: 10s retries: 3 - 校验版本兼容性:
- 避免使用
latest标签,改用与Broker同大版本的基础镜像,比如confluentinc/cp-kafka-connect-base:7.1.2,防止跨版本不兼容。 - 确认PLC4X 0.10.0版本与当前Kafka Connect版本的兼容性。
- 避免使用
- 检查环境变量配置:
- 验证
CLASSPATH中的监控拦截器版本与基础镜像版本匹配,避免类加载错误。 - 进入容器执行
ls $CONNECT_PLUGIN_PATH,确认路径包含插件目录且文件存在。
- 验证
- 直接测试Connect服务可用性:在宿主机执行
curl http://localhost:8083/connectors,根据返回结果定位问题。 - 对齐Control Center版本:将Control Center版本调整为与Broker一致的7.1.2,避免跨版本兼容性问题。
内容的提问来源于stack exchange,提问作者Alex P.
相关产品推荐
相关产品推荐

