首页 > 解决方案 > 添加 db.timezone 属性后,Kafka Connect 找不到 ZoneRulesProvider

问题描述

我在分布式模式下运行 Kafka Connect (Confluent),并且最近将 db.timezone 属性添加到我的 JDBC 源连接器中。这样做之后,我在加载连接器时看到了这个错误:

java.lang.NoClassDefFoundError: 无法初始化类 java.time.zone.ZoneRulesProvider\n\tat java.time.ZoneRegion.ofId(ZoneRegion.java:120)\n\tat java.time.ZoneId.of(ZoneId.java :411)

这发生在 JDBCSourceConnectorConfig 中的这段代码中:

https://github.com/confluentinc/kafka-connect-jdbc/blob/master/src/main/java/io/confluent/connect/jdbc/source/JdbcSourceConnectorConfig.java#L807

如果我登录到我的 Kafka Connect 框并运行,java -version我会得到:

openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

如果我创建一个如下所示的小型 Java 程序并在该框上运行它,它可以正常工作:

import java.time.ZoneId;
import java.time.zone.ZoneRulesProvider;
import java.util.TimeZone;

public class TestTime {
  public static void main(String[] args) {
    String dbTimeZone = "America/New_York";
    System.out.println(TimeZone.getTimeZone(ZoneId.of(dbTimeZone)));
    System.out.println(ZoneRulesProvider.getAvailableZoneIds());
  }
}

那么为什么 confluent/kafka connect 会中断呢?为什么会找不到ZoneRulesProvider

标签: apache-kafka-connectjava-time

解决方案


在我的服务器上重新启动 kafka connect 后,此问题似乎已经消失。


推荐阅读