升级到4.0后,驱动程序和数据库日志中出现以下错误。应用程序团队目前正在使用datatax java驱动程序3.11.0。! com.datastax.driver.core.exceptions。ProtocolError:主机101-142-43-18-ec2.internal/101.142.43.18:9042上发生意外的协议错误。这是此库中的一个错误,请报告:对于本机协议版本<4,不得发送带有警告标志的帧对此有什么建议吗?
rhfm7lfc1#
我还没有收到您的回复,所以我假设您在应用程序中硬编码了一个较旧的协议版本,例如:
Cluster cluster = Cluster.builder() ... .withProtocolVersion(ProtocolVersion.V3) .build();
本机协议定义了客户端和Cassandra集群之间通过TCP的CQL二进制消息的格式。Cassandra 2.1引入了原生协议v3(CASSANDRA-6855)。C*2.2后来添加了对本机协议v4(CASSANDRA-8043)的支持,该协议继续使用Cassandra 3.0和3.11。Cassandra 4.x还支持v4,但也添加了本地协议v5(CASSANDRA-14973)。协议v4添加了在查询生成警告(CASSANDRA-8930)时向客户端发送通知的功能。较旧的协议无法向客户端发送查询警告,因此Cassandra可以理解地生成以下错误消息:
Must not send frame with WARNING flag for native protocol version < 4
在应用程序中,您需要配置驱动程序以使用更新的协议版本。更好的是,当连接到Cassandra 4.x时,Java驱动程序3.11将自动协商使用本机协议v5,除非您强制驱动程序使用较旧的协议版本。有关详细信息,请参见Native protocol in Java driver 3.11。干杯
1条答案
按热度按时间rhfm7lfc1#
我还没有收到您的回复,所以我假设您在应用程序中硬编码了一个较旧的协议版本,例如:
本机协议定义了客户端和Cassandra集群之间通过TCP的CQL二进制消息的格式。Cassandra 2.1引入了原生协议v3(CASSANDRA-6855)。C*2.2后来添加了对本机协议v4(CASSANDRA-8043)的支持,该协议继续使用Cassandra 3.0和3.11。
Cassandra 4.x还支持v4,但也添加了本地协议v5(CASSANDRA-14973)。协议v4添加了在查询生成警告(CASSANDRA-8930)时向客户端发送通知的功能。较旧的协议无法向客户端发送查询警告,因此Cassandra可以理解地生成以下错误消息:
在应用程序中,您需要配置驱动程序以使用更新的协议版本。更好的是,当连接到Cassandra 4.x时,Java驱动程序3.11将自动协商使用本机协议v5,除非您强制驱动程序使用较旧的协议版本。
有关详细信息,请参见Native protocol in Java driver 3.11。干杯