Как мне реплицировать локальный узел Кассандры для другого удаленного узла Кассандры?
Мне нужно реплицировать локальный узел с помощью SimpleStrategy на удаленный узел в другой базе данных Cassandra. Кто-нибудь знает, с чего мне начать?
1 ответ
Основная сложность здесь, если вы записываете данные в оба кластера, заключается в том, как избежать перезаписи данных, которые были изменены в облаке позже, чем ваша локальная настройка. Для этого есть несколько возможностей:
Если структура таблиц такая же (включая имена пространств ключей, если используются определяемые пользователем типы), вы можете просто скопировать SSTables со своего локального компьютера в облако и использовать sstableloader для их воспроизведения - в данном случае Cassandra будет подчиняться фактическому времени записи и не будет перезаписывать измененные данные. Кроме того, если вы выполняете удаление из таблиц, вам необходимо скопировать SSTables до истечения срока действия надгробий. Вы не можете копировать все SSTables каждый раз, а только файлы, которые изменились с момента последней загрузки данных. Но вам всегда нужно копировать SSTables со всех узлов, с которых вы выполняете загрузку.
Если структура неодинакова, вы можете использовать DSBulk или Spark Cassandra Connector . В обоих случаях вам также необходимо экспортировать данные со временем записи, а затем загрузить их также с меткой времени. Обратите внимание, что в обоих случаях, если разные столбцы имеют разное время записи, вам нужно будет загрузить эти данные отдельно, потому что Cassandra позволяет указывать только одну временную метку при обновлении / вставке данных.
В случае DSBulk вы можете следовать примеру 19.4 для экспорта данных из этого сообщения в блоге и примеру 11.3 для загрузки (из другого сообщения в блоге ). Так что для этого может потребоваться сценарий оболочки. Кроме того, вам понадобится дисковое пространство для хранения экспортированных данных (но вы можете использовать сжатие).
В случае Spark Cassandra Connector вы можете экспортировать данные без промежуточного хранилища, если оба узла доступны из Spark. Но вам нужно будет написать код Spark для чтения данных с API RDD или помощьюDataFrame .