架构解析错误,出现flink-connector-cassandra“UnresolvedUserTypeException:无法解析用户类型system_distributed.duration”

qxsslcnc  于 12个月前  发布在  Apache
关注(0)|答案(2)|浏览(128)

上下文:我们有一个flink应用程序,它使用来自Kafka的数据并将数据汇到Scylla DB上
应用启动时出现Schema解析错误
为什么我们会得到这个错误?
Flink版本:**1.15.4
Scylla DB版本:**scylla-enterprise-2022.2.11-0

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-connector-cassandra_2.12</artifactId>
  <version>1.15.4</version>
</dependency>
WARNING: All illegal access operations will be denied in a future release
2023-08-11 09:16:04.567 [Source: Custom Source -> Map -> Sink: Cassandra Sink (7/9)#0] ERROR com.datastax.driver.core.SchemaParser  - Error parsing schema for table system_distributed.service_levels: Cluster.getMetadata().getKeyspace("system_distributed").getTable("service_levels") will be missing or incomplete
com.datastax.driver.core.exceptions.UnresolvedUserTypeException: Cannot resolve user type system_distributed.duration
        at com.datastax.driver.core.DataTypeCqlNameParser.parse(DataTypeCqlNameParser.java:147)
        at com.datastax.driver.core.TableMetadata.build(TableMetadata.java:188)
        at com.datastax.driver.core.SchemaParser.buildTables(SchemaParser.java:176)
        at com.datastax.driver.core.SchemaParser.buildKeyspaces(SchemaParser.java:128)
        at com.datastax.driver.core.SchemaParser.refresh(SchemaParser.java:64)
        at com.datastax.driver.core.ControlConnection.refreshSchema(ControlConnection.java:341)
        at com.datastax.driver.core.ControlConnection.tryConnect(ControlConnection.java:271)
        at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:199)
        at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:77)
        at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1414)

任何输入都会有帮助

kyks70gy

kyks70gy1#

Cannot resolve user type system_distributed.duration消息表示底层驱动程序不知道duration类型。
至少将驱动程序升级到v3.2.0,这是支持持续时间的初始版本。请注意,最新的Java驱动程序已经是v4.17了,所以如果Flink已经支持新的驱动程序API,那么最好切换到v4.x。

arknldoa

arknldoa2#

有趣的是,从你发布的堆栈跟踪中看到,Cassandra连接器使用的Java驱动程序不知道如何处理duration类型:

...
com.datastax.driver.core.exceptions.UnresolvedUserTypeException: Cannot resolve user type system_distributed.duration
        at com.datastax.driver.core.DataTypeCqlNameParser.parse(DataTypeCqlNameParser.java:147)
        at com.datastax.driver.core.TableMetadata.build(TableMetadata.java:188)
        ...

所以我必须检查连接器使用的是哪个版本。
我非常惊讶地发现Flink 1.15.4中的Cassandra连接器使用的是Cassandra Java驱动程序v3.0.0:

<driver.version>3.0.0</driver.version>

该版本的Java驱动程序是released all the way back to January 2016。对duration类型的支持在一年后被添加到Java驱动程序中(JAVA-1347)。
Flink 1.16.0中的Cassandra连接器使用Java驱动程序3.11.2(released in April 2022),它支持duration类型。
请注意,Cassandra连接器已从Flink树中移出,并移到专用的存储库flink-connector-cassandraFLINK-29982)中。干杯!干杯!

相关问题