2013-03-25 4 views
1

Я испытываю странную проблему с Cassandra. Мое понимание было в том, что Кассандра была масштабируемой для вставок. Это означает, что если бы я получал 1500 записей с кластером из 2 серверов, я мог бы увеличить это до 4 серверов и получить около 1500 записей/с. Я понимаю, что записи/s могут не увеличиваться линейно с количеством узлов в кластере, но в настоящее время я не вижу увеличения количества записей/с при добавлении большего количества узлов.Вставки Cassandra дросселируются на кластере

Моя текущая настройка что-то вроде этого:

Пакетные вставки с Pycassa используя размер пакета 20 строк. Коэффициент репликации 2 Долгосрочные записи на

Некоторые из столбцов Семейства имеют обычные столбцы, некоторые из которых имеют широкие колонны до нескольких сотен тысяч столбцов. Вставки для ColumnFamilies с широкими столбцами вставляются в несколько партий, а не 20 строк с 100 000 столбцов.

Кластер cassandra представляет собой кластер из 2 узлов, размещенный в EC2, с использованием m1.xlarge с SSD-накопителями (без рейда), а журналы фиксации находятся на том же диске, что и sstables.

Я пробовал масштабирование кластера до 10+ узлов, и я получаю такую ​​же производительность, как и два узла. Я также пытался увеличить количество экземпляров, импортирующих данные, и производительность одинакова, за исключением того, что задержка для каждой операции записи значительно выше. Но независимо от того, что я делаю, я не могу заставить записи работать быстрее 1500/с.

ответ

3

Похоже, что ваш клиент не насыщает Кассандру. Если Cassandra не является CPU, i/o или network bound, это ваша проблема.

Правило большого пальца состоит в том, что для двух серверов Cassandra требуется около 1 клиентской машины, чтобы насытить ее на одной копии. (Итак, около 1: 4 для 2.) Умножьте количество клиентов на 5-10, если вы не используете «быстрый» язык, такой как Java; для Python вам также потребуется приложить некоторые усилия для параллелизации нескольких процессов в каждой машине из-за GIL.

TLDR продолжает добавлять клиентские машины, пока номера не перестанут расти.

(я бы также предложить мониторинг с чем-то вроде OpsCenter, что бы обратить внимание на проблемы, например, от использования ByteOrderedPartitioner, или не правильно распределить нагрузку запросов по кластеру.)

+0

Да, я получаю такую ​​же производительность, с 2-мя клиентами как 10. Но вы правы, серверы Cassandra не связаны с вводом ввода-вывода. Они имеют среднюю нагрузку около 1-2, а кластер выполняет около 500 операций ввода-вывода, что хорошо подходит для дисков. У меня около 500 файлов csv, которые я импортирую в cassandra. Каждый клиент запускает 8 процессов одновременно, загружая другой файл csv. Еще не удачи ... – bwight

+0

Также убедитесь, что ваши клиенты распространяют вставки вокруг кластера, а не все вставляются в один и тот же узел. – Zanson

Смежные вопросы