Cassandra 是否支持 Java 10?

Does Cassandra support Java 10?

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

我在网上找不到任何可靠的信息表明它绝对不受支持。

4个月前的

表示不支持Java10,但没说证实,更多的是推测。另一位用户也对此发表了评论,称他们已在 Java 11.

上 运行 获得了它

datastax 上 this ticket 的最后评论说 "We've updated our CI matrix to include Java 10 and everything works except for the aforementioned OSGi testing issues." 我不确定从中得到什么,但这似乎暗示它正在使用 Java 10现在,因为工单被标记为已解决。

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

终于this blog discusses a way to get Java 11 working with cassandra. However I notice this is using Cassandra 4.0. Has this officially been released? I notice on their website they say the release date is tbd and says the current stable release is 3.11.3, and there is no mention of it on their compatibility page

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

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

已发布的 Cassandra 版本仅支持 Java8 - 尚未发布的 Cassandra 4.0 将支持更高版本。您可以在 CASSANDRA-9608

中跟踪进度

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 个月发布周期,Java 9 和 Java 10 在 Apache Cassandra 4.0 发布时将不再是 "current"。此外,运行 在构建过程中的测试表明,他们对使用哪个 Java 版本很挑剔。因此,决定为 4.0 支持 Java 8 和 11,因为 Java 9 和 10 的工作似乎优先级较低。

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

但在4.0之前,Java8的最新补丁确实是唯一的选择。

在 Cassandra 3.11.4 中,我们已经能够使用 Java11 执行 Cassandra 引擎,但是有一些陷阱:

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

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

截至目前,Cassandra 3.x 仅适用于 java 8。Cassandra 4.0 支持 Java 8 和 Java 11,但尚未发布写这个答案的时间。

如果你想运行 Cassandra在你的本地系统(不推荐用于生产)与java 11。那么你可以按照以下步骤操作:

Prerequisite: Java 11, Apache Ant, Python

  1. 下载Cassandra t运行k分支代码:https://github.com/apache/cassandra

  2. 解压缩文件并在 terminal/command 提示符下打开文件夹。

  3. 使用 -Duse.jdk11=true 参数构建 cassandra:
ajit-soman@ajitsoman-X542BA:~/Downloads/cassandra-trunk$ ant -Duse.jdk11=true
Buildfile: /home/ajit-soman/Downloads/cassandra-trunk/build.xml
   [script] Warning: Nashorn engine is planned to be removed from a future JDK release
...
...
jar:
[mkdir] Created dir: /home/ajit-soman/Downloads/cassandra-trunk/build/classes/stress/META-INF
[mkdir] Created dir: /home/ajit-soman/Downloads/cassandra-trunk/build/tools/lib
  [jar] Building jar: /home/ajit-soman/Downloads/cassandra-trunk/build/tools/lib/stress.jar
[mkdir] Created dir: /home/ajit-soman/Downloads/cassandra-trunk/build/classes/fqltool/META-INF
  [jar] Building jar: /home/ajit-soman/Downloads/cassandra-trunk/build/tools/lib/fqltool.jar

BUILD SUCCESSFUL
Total time: 7 minutes 38 seconds
  1. 导航到 bin 文件夹和 运行 Cassandra:
ajit-soman@ajitsoman-X542BA:~/Downloads/cassandra-trunk/bin$ ./cassandra 
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
CompileCommand: dontinline
  1. 检查节点工具状态
ajit-soman@ajitsoman-X542BA:~/Downloads/cassandra-trunk/bin$ ./nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load      Tokens  Owns (effective)  Host ID                               Rack 
UN  127.0.0.1  5.79 KiB  256     100.0%            68687cfd-a80b-45db-93cd-7bc2d212a64b  rack1
  1. 运行 cqlsh
ajit-soman@ajitsoman-X542BA:~/Downloads/cassandra-trunk/bin$ ./cqlsh 
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 4.0-alpha2-SNAPSHOT | CQL spec 3.4.5 | Native protocol v4]
Use HELP for help.
cqlsh>