Cassandra是否支持Java 10?

问题描述 投票:10回答:3

我们计划将我们的环境从Java 8迁移到OpenJDK 10.在我的本地计算机上执行此操作,我发现Cassandra将不再为我启动,给出以下错误:

enter image description here

我无法在网上找到任何可靠信息,表示绝对不支持。

This post从4个月前开始表明他们不支持Java 10,但并没有说它已被证实,并且更加推断。另一位用户也发表评论说他们已经设法让它在Java 11上运行。

关于this ticket在datastax上的最终评论说:“我们已经更新了我们的CI矩阵以包含Java 10,除了上述的OSGi测试问题外,一切都有效。”我不知道该从中拿走什么,但它似乎暗示它现在正在使用Java 10,因为票证被标记为已解决。

This ticket,他们讨论了对Java 11的支持。有一些评论讨论了甚至支持Java 10的必要性,但他们并没有真正给出关于它们是否会有明确答案。

最后,this blog讨论了一种让Java 11与cassandra一起工作的方法。但是我注意到这是使用Cassandra 4.0。这个正式发布了吗?我注意到他们的website他们说发布日期是tbd并且说目前的稳定版本是3.11.3,并且在他们的compatibility page上没有提到它。

我目前通过Datastax在Windows上安装了Cassandra,但我也尝试克隆当前的git存储库并从那里运行它,但是我得到了相同的错误消息(虽然在他们的github上他们似乎确实说它只用Java 8测试过)。

他们根本不支持10吗?此外,如果有人知道他们是否计划很快发布4.0,如果这肯定会支持11(我假设10?),那将是一个巨大的帮助。

apache cassandra datastax java-10
3个回答
15
投票

Cassandra 4.0明确支持Java 8和Java 11.事实上,他们甚至将配置文件拆分为:

$ pwd
/Users/aaron/local/apache-cassandra-4.0-SNAPSHOT/conf
$ ls -a jvm*
jvm-clients.options jvm11-clients.options   jvm8-clients.options
jvm-server.options  jvm11-server.options    jvm8-server.options

支持这些特定版本的原因是双重的。首先,Java 8几年来一直是Cassandra事实上的标准。用户希望将来它仍然适用于Java 8。

鉴于Java新的6个月发布周期,当Apache Cassandra 4.0问世时,Java 9和Java 10将不再是“最新的”。另外,在构建过程中运行的测试表明他们使用的Java版本很挑剔。因此,决定支持Java 8和11 for 4.0,因为Java 9和10的工作似乎优先级较低。

这并不是说Cassandra 4.0不能在Java 9或10上运行。事实上,CASSANDRA-9608甚至提交了一个应该覆盖它的补丁。但事实仍然是Java 8因其在Cassandra用户群中的长期使用而被包括在内。 Java 11将是4.0发布时的当前JDK / JRE。如果你想确保你的集群运行良好,我会选择其中一个。

但是到4.0之前,最新的Java 8补丁确实是唯一的选择。


5
投票

发布的Cassandra版本仅支持Java 8 - 对更高版本的支持将在Cassandra 4.0中尚未发布。您可以跟踪CASSANDRA-9608的进度


1
投票

使用Cassandra 3.11.4,我们已经能够使用Java 11执行Cassandra引擎,但是有一些问题:

  • 如果由于任何原因你还在使用CMS进行垃圾收集,那么现在是时候转移到G1了;这是在jvm.options文件中设置的。
  • 同样在jvm.options中,您将需要禁用ThreadPriorityPolicy,因为它已被Java 9弃用
  • 通过Java 9引入的gc活动的统一日志记录,您需要删除jvm.options中的gc特定参数。其中一些参数是: -Xloggc -XX:+ PrintGCDetails -XX:+ PrintGCDateStamps -XX:+ PrintHeapAtGC -XX:+ PrintTenuringDistribution -XX:+ PrintGCApplicationStoppedTime -XX:+ PrintPromotionFailure
  • nodetool仍然需要Java 8才能执行。 我们安装了JVM,并使用替代方法将Java 11设置为默认值。这也是JAVA_HOME变量的值 我们有一个名为JAVA8_HOME的新变量指向该版本 我们在设置JAVA变量时更新了nodetool脚本(在我们的例子中是在/ usr / bin / nodetool中)以使用JAVA8_HOME
  • 对于使用offheap_buffers进行memtable_allocation_type的聚类(它在cassandra.yaml中定义),我们必须将其更改为使用offheap_objects
© www.soinside.com 2019 - 2024. All rights reserved.