Схема ScyllaDB вызывает проблемы при импорте с помощью cassandra-stress

В настоящее время я использую ScyllaDB в своей среде и по техническим причинам изучаю возможность перехода на Cassandra. Я пытаюсь заставить cassandra-stress загрузить кластер Cassandra данными, используя схему, возможно, идентичную той, которая в настоящее время используется в ScyllaDB. К сожалению, есть некоторые проблемы.

Окружение:

  • ScyllaDB 3.0.7 (= Cassandra 3.0.8) работает в Ubuntu 18.04
  • Cassandra 3.11.4 работает на Ubuntu 18.04
  • cassandra-stress 3.0.18 (часть cassandra-tools pkg), работающая на Ubuntu 18.04

Процесс выглядит следующим образом:

  • дамп схемы из ScyllaDB (desc keyspace_name)
  • подготовить файл yaml cassandra-stress - одно пространство ключей, всего пять таблиц
  • запустить cassandra-stress (cassandra-stress user profile=schema.yml cl=QUORUM duration=30s 'ops(insert=1)' -node 172.19.11.9 -rate threads=1)

Чтобы убедиться, что нет проблем, связанных с пространством ключей, каждый запуск cassandra-stress выполняется в новом пространстве ключей (я увеличиваю имя).

Теперь, когда схема составляет 1: 1, как та, что выгружена из Scylla, определение двух таблиц (и только этих двух) приводит к сбою инструмента стресса: com.datastax.driver.core.exceptions.SyntaxError: line 1:35 no viable alternative at input 'WHERE' (UPDATE "activities_bp_action" SET [WHERE]...).

Определения таблиц следующие:

table: activities_bp
table_definition: |
  CREATE TABLE activities_bp  (
    business_profile_id int,
    create_date timestamp,
    event_uuid uuid,
    PRIMARY KEY (business_profile_id, create_date, event_uuid)
  ) WITH CLUSTERING ORDER BY (create_date DESC, event_uuid ASC)
    AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.DeflateCompressor'}
table: activities_bp_action
table_definition: |
  CREATE TABLE activities_bp_action  (
    business_profile_id int,
    action text,
    create_date timestamp,
    event_uuid uuid,
    PRIMARY KEY ((business_profile_id, action), create_date, event_uuid)
  ) WITH CLUSTERING ORDER BY (create_date DESC, event_uuid ASC)
    AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.DeflateCompressor'}

Если две строки, содержащие PRIMARY KEY и CLUSTERING ORDER, заменить следующим, cassandra-stress работает нормально без ошибок и начинает заполнять кластер данными. Однако определения теперь отличаются от определений из ScyllaDB:

    PRIMARY KEY (event_uuid, create_date)
  ) WITH CLUSTERING ORDER BY (create_date DESC)

Теперь, после того как cassandra-stress запускается с измененным определением, я могу вернуться к немодифицированному (тому, которое раньше терпело неудачу). Если запустить в уже существующем пространстве ключей, yaml теперь работает нормально и заполняет кластер данными. Это может означать, что проблема возникает при создании таблиц?

Мне не удалось найти полный запрос, который cassandra-stress отображает в своей трассировке стека, как при запуске cassandra-stress, так и Cassandra в режимах отладки, и этот запрос немного меня озадачивает.

Есть идеи, почему возникает проблема? Спасибо!

изменить:

Прикрепление schema.yml: https://gist.github.com/schybbkoh/76cdbf19a2bb933419063526ff5ac44f

изменить:

Как оказалось, схема «работает нормально, без ошибок и начинает заполнять кластер данными» создает и заполняет данными только последнюю таблицу, определенную в схеме. Здесь что-то не так.


person theo    schedule 22.10.2019    source источник
comment
Как выглядит ваш запрос на вставку? Можете ли вы вкратце поделиться всей конфигурацией? Также можно рассмотреть компрессор LZ4Compressor (хотя я сомневаюсь, что это будет заметно при нагрузке).   -  person Chris Lohfink    schedule 22.10.2019
comment
Полный schema.yml тоже не повредит   -  person dyasny    schedule 22.10.2019
comment
Полный schema.yml был прикреплен к исходному сообщению. Что entire config вы имеете в виду, Кассандра?   -  person theo    schedule 23.10.2019
comment
В чем проблема, которая возвращает вас к C *?   -  person dor laor    schedule 24.10.2019
comment
В общем, все, что касалось нештатной работы. Т.е. когда узел освобождается (что происходит, когда вы находитесь в облаке), восстановление кластера занимает буквально недели. Обращался к ребятам из Scylla с моими проблемами, но в основном то, что я слышал, было то, что мы знаем об этом, будем работать над этим в будущем. В любом случае, я думаю, что в рамках этой темы мы должны сосредоточиться на том, чтобы заставить работать стресс кассандры.   -  person theo    schedule 24.10.2019


Ответы (1)


Хорошо, проблема решена. Было две проблемы:

  • cassandra-stress 3.0.18 против Cassandra 3.11.4 используют другую спецификацию CQL (возник конфликт)
  • cassandra-stress 3.x не поддерживает несколько определений таблиц в одном YML (см. https://issues.apache.org/jira/browse/CASSANDRA-8780)
person theo    schedule 28.10.2019