У меня есть кластерные узлы Cassandra, распределенные по двум центрам обработки данных.6 узлов в каждом центре обработки данных, всего 12 узлов
Определение моего пространства ключей:
CREATE KEYSPACE my_keyspace WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': '3', 'dc2': '3'} AND durable_writes = true;
В каждом узле у меня есть 64 токена.
Я использую Cassandraдрайвера для подключения к кластеру и использования политики балансировки нагрузки по умолчанию DCAwareRoundRobinPolicy и использования только узлов dc1
в качестве точек контакта.Итак, я предполагаю, что у dc2
узлов будет HostDistance
IGNORED
, и мое приложение не будет к ним подключаться.
Примечание. Для всех операций чтения и записи я использую одну и ту же конфигурацию
Мой вариант использования - полное сканирование таблицы.Но я не могу использовать Spark.Таким образом, вместо этого я добился этого путем получения всего диапазона токенов с помощью metadata.getTokenRanges()
и запроса этих диапазонов токенов в нескольких потоках.
Все отлично работает.Но metadata.getTokenRanges()
возвращает 768 токенов (64 * 12).Это означает, что он дает мне диапазон токенов для всех 12 узлов.
Так как мне нужно пройти через все диапазоны токенов.Даже с несколькими потоками процесс очень медленный.
Есть ли способ получить диапазоны токенов только одного центра обработки данных.Я даже пытался получить диапазоны токенов, используя metadata.getTokenRanges("my_keyspace", host from dc1)
.Я получаю меньше токенов (517), но когда я использую этот список, я получаю меньше данных.
Как получить диапазоны токенов только 1 DC?
Редактировать: я проверил задержку чтения / записи в обоих кластерах.Я не вижу никаких операций, выполняемых на dc2
, тогда как я вижу четкий всплеск в моем dc1
центре обработки данных.
Теперь это еще более загадочно для меня.Если dc2
никогда не запрашивается, как я получаю 64*12 +1
диапазоны токенов?а почему не 64*6+1
?