我们计划将我们的环境从Java 8迁移到OpenJDK 10.在我的本地计算机上执行此操作,我发现Cassandra将不再为我启动,给出以下错误:
我无法在网上找到任何可靠信息,表示绝对不支持。
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?),那将是一个巨大的帮助。
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补丁确实是唯一的选择。
发布的Cassandra版本仅支持Java 8 - 对更高版本的支持将在Cassandra 4.0中尚未发布。您可以跟踪CASSANDRA-9608的进度
使用Cassandra 3.11.4,我们已经能够使用Java 11执行Cassandra引擎,但是有一些问题:
jvm.options
文件中设置的。ThreadPriorityPolicy
,因为它已被Java 9弃用jvm.options
中的gc特定参数。其中一些参数是:
-Xloggc
-XX:+ PrintGCDetails
-XX:+ PrintGCDateStamps
-XX:+ PrintHeapAtGC
-XX:+ PrintTenuringDistribution
-XX:+ PrintGCApplicationStoppedTime
-XX:+ PrintPromotionFailurenodetool
仍然需要Java 8才能执行。
我们安装了JVM,并使用替代方法将Java 11设置为默认值。这也是JAVA_HOME变量的值
我们有一个名为JAVA8_HOME的新变量指向该版本
我们在设置JAVA变量时更新了nodetool脚本(在我们的例子中是在/ usr / bin / nodetool中)以使用JAVA8_HOMEoffheap_buffers
进行memtable_allocation_type
的聚类(它在cassandra.yaml
中定义),我们必须将其更改为使用offheap_objects