Поддерживает ли Cassandra Java 10?

Мы планируем перенести нашу среду с Java 8 на OpenJDK 10. Сделав это на своей локальной машине, я обнаружил, что Cassandra больше не будет запускаться для меня, что дает следующую ошибку:

enter image description here

Я не могу найти надежную информацию в Интернете, которая говорит, что она определенно не поддерживается.

Это сообщение от 4 месяцев назад говорит о том, что они не поддерживают Java 10, но не говорят, что это подтверждено и более выведено. Также есть комментарий к нему от другого пользователя, который сказал, что ему удалось запустить его на Java 11.

В заключительном комментарии к этому билету на datastax говорится: "Мы обновили нашу матрицу CI, включив Java 10, и все работает, за исключением вышеупомянутых проблем тестирования OSGi". Я не уверен, что отнять у него, но, похоже, подразумевает, что он работает с Java 10 сейчас, так как билет отмечен как разрешенный.

В этом билете они обсуждают поддержку Java 11. Есть несколько комментариев, в которых обсуждается необходимость даже поддерживать Java 10, но на самом деле они не дают окончательного ответа о том, будут они или нет.

Наконец, в этом блоге обсуждается способ заставить Java 11 работать с cassandra. Однако я замечаю, что это использование Cassandra 4.0. Это официально было выпущено? Я отмечаю, что на их веб-сайте говорится, что дата релиза - tbd, и говорит, что текущий стабильный релиз - 3.11.3, и на их странице совместимости нет упоминания.

В настоящее время я установил Cassandra на windows через Datastax, но я также попытался клонировать текущий репозиторий git и запускать его оттуда, но я получаю такое же сообщение об ошибке (хотя на их github они, похоже, говорят, что он был протестирован только с Java 8).

Неужели они просто не поддерживают 10? Также, если кто-нибудь знает, скоро ли они планируют выпустить 4.0, и если это определенно поддержит 11 (и я предполагаю 10?), Это будет огромной помощью.

Ответ 1

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, Java 9 и Java 10 больше не будут "текущими" при выходе Apache Cassandra 4.0. Кроме того, тесты, которые выполняются во время сборки, показали, что они придирчивы к той версии Java, с которой они работают. Поэтому было принято решение поддержать поддержку Java 8 и 11 для 4.0, поскольку работа над Java 9 и 10 показалась менее приоритетной.

Это не значит, что Cassandra 4.0 не будет работать на Java 9 или 10. На самом деле, CASSANDRA-9608 даже имеет исправленный патч, который должен его покрывать. Но факт остается фактом: Java 8 включен из-за его многолетнего использования в базе данных Cassandra. Java 11 будет текущим JDK/JRE на момент выпуска 4.0. Если вы хотите быть уверенным, что ваш кластер будет работать хорошо, я бы выбрал один из этих двух.

Но до 4.0 самый последний патч Java 8 - это единственный вариант.

Ответ 2

Выпущенные версии Cassandra поддерживают только Java 8 - поддержка более высоких версий будет в Cassandra 4.0, которая еще не выпущена. Вы можете отслеживать прогресс в CASSANDRA-9608

Ответ 3

С Cassandra 3.11.4 мы смогли запустить движок Cassandra с Java 11, но было несколько ошибок:

  • Если по какой-либо причине вы все еще используете CMS для сборки мусора, самое время перейти к G1; это устанавливается в файле jvm.options.
  • Также в jvm.options вам нужно будет отключить ThreadPriorityPolicy поскольку он устарел в Java 9
  • С помощью унифицированной регистрации активности gc, представленной в 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), чтобы использовать JAVA8_HOME при установке переменной JAVA
  • Для кластера, который использовал offheap_buffers для memtable_allocation_type (он определен в cassandra.yaml), нам пришлось изменить его на использование offheap_objects

Ответ 4

Используя Cassandra 3.11.4 и Java 12, выполнив всю вышеперечисленную работу, все равно кажется, что она не работает. Должен ли я использовать Cassandra 4.0?

Ответ 5

На данный момент Cassandra 3.x будет работать только с java 8. Cassandra 4.0 поддерживает Java 8 и Java 11, но на момент написания этого ответа еще не выпущена.

Если вы хотите запустить Cassandra в локальной системе (не рекомендуется для производства) с java 11. Затем вы можете выполнить следующие действия:

Prerequisite: Java 11, Apache Ant, Python

  1. Загрузите код магистрали Cassandra: https://github.com/apache/cassandra

  2. Разархивируйте файл и откройте папку в терминале/командной строке.

  3. Создайте кассандру с -Duse.jdk11 = истинный аргумент:
[email protected]:~/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:
[email protected]:~/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. Проверьте состояние nodetool
[email protected]:~/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
[email protected]:~/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>