Cassandra是否支持Java 10?

use*_*784 11 cassandra datastax java-10

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

在此输入图像描述

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

这篇帖子从4个月前开始表明他们不支持Java 10,但并没有说它已得到确认,而且更为推断.另一位用户也发表评论说他们已经设法让它在Java 11上运行.

关于这个数据集票据的最终评论说:"我们已经更新了我们的CI矩阵以包含Java 10,除了前面提到的OSGi测试问题之外,一切都有效." 我不知道该从中拿走什么,但它似乎暗示它现在正在使用Java 10,因为票证被标记为已解决.

这张票,他们讨论了对Java 11的支持.有一些评论讨论了甚至支持Java 10的必要性,但他们并没有真正给出关于它们是否能够的明确答案.

最后,本博客讨论了一种让Java 11与cassandra一起工作的方法.但是我注意到这是使用Cassandra 4.0.这个正式发布了吗?我在他们的网站上注意到他们说发布日期是tbd,并说目前的稳定版本是3.11.3,并且在兼容性页面上没有提到它.

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

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

Aar*_*ron 16

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
Run Code Online (Sandbox Code Playgroud)

支持这些特定版本的原因是双重的.首先,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补丁确实是唯一的选择.

  • @ user3275​​784目前4.0分支上有代码冻结,社区目前正在关注QA.没有发布日期设置为关注质量而不是快速发布.我的一个非常粗略的猜测是2019年第二季度,但现在很难说.如果您对更新感兴趣,请访问用户列表:https://cassandra.apache.org/community/ (2认同)

Car*_*las 7

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

  • 如果出于某种原因您仍在使用 CMS 进行垃圾收集,那么是时候转向 G1 了;这是在jvm.options文件中设置的。
  • 同样在 jvm.options 中,您将需要禁用ThreadPriorityPolicy它,因为它已被Java 9弃用
  • 随着 Java 9 引入的 gc 活动的统一日志记录,您将需要在jvm.options. 其中一些参数是:
    • -Xloggc
    • -XX:+PrintGCDetails
    • -XX:+PrintGCDateStamps
    • -XX:+PrintHeapAtGC
    • -XX:+PrintTenuringDistribution
    • -XX:+PrintGCApplicationStoppedTime
    • -XX:+PrintPromotionFailure
  • nodetool 仍然需要 Java 8 才能执行。

    • 我们已经安装了 JVM,并使用替代方法将 Java 11 设置为默认值。这也是JAVA_HOME变量的值
    • 我们有一个名为 JAVA8_HOME 的新变量,它指向那个版本
    • 我们更新了 nodetool 脚本(在我们的例子中它在 /usr/bin/nodetool 中)以在设置 JAVA 变量时使用 JAVA8_HOME
  • 对于使用offheap_buffersfor memtable_allocation_type(在 中定义cassandra.yaml)的集群,我们必须将其更改为使用offheap_objects


Ale*_*Ott 6

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