Поддерживает ли Cassandra Java 10?
Мы планируем перенести нашу среду с Java 8 на OpenJDK 10. Сделав это на своей локальной машине, я обнаружил, что Cassandra больше не будет запускаться для меня, что дает следующую ошибку:
Я не могу найти надежную информацию в Интернете, которая говорит, что она определенно не поддерживается.
Это сообщение от 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
Загрузите код магистрали Cassandra: https://github.com/apache/cassandra
Разархивируйте файл и откройте папку в терминале/командной строке.
- Создайте кассандру с -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
- Перейдите в папку 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
- Проверьте состояние 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
- Запустите 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>