2017-01-12 13 views
0

Я пытаюсь загрузить данные в Cassandra, и это не работает. Я работаю на одном узле (ноутбук), но я вижу такое же поведение в небольшом кластере (3-5 узлов). Я запускаю Cassandra 3.9 с настройками по умолчанию.Ошибка Cassandra при записи данных

Я пишу из двух потоков, используя драйвер DataStax Java 3.0.0. Я пишу строки с 50 КБ строк с 5-10К столбцами. Общий набор данных составит около 40 ГБ на диске. Я пишу 5 строк одновременно/поток.

После вставки на некоторое время, я начинаю писать таймаут:

com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at consistency LOCAL_ONE (1 replica were required but only 0 acknowledged the write) 

я повторить попытку с экспоненциальным снижением мощности. В конце концов записи перестают поступать вперед. На данный момент, я вижу, очень долго GC паузы:

WARN [Service Thread] 2017-01-11 19:04:54,529 GCInspector.java:282 - ConcurrentMarkSweep GC in 4139ms. CMS Old Gen: 3456106376 -> 3455729576; Par Eden Space: 671088640 -> 670388064; Par Survivor Space: 83886080 -> 58722784 
WARN [Service Thread] 2017-01-11 19:04:58,692 GCInspector.java:282 - ConcurrentMarkSweep GC in 4010ms. CMS Old Gen: 3456105584 -> 3455769528; Par Survivor Space: 83886080 -> 62960320 

На данный момент, похоже, все время тратится на GC. Даже если я убью работу записи, Кассандра, похоже, не восстановится. В конечном итоге он умирает с OutOfMemoryError. Я опустил memtable пространство до 32Мб:

memtable_heap_space_in_mb: 32 
memtable_offheap_space_in_mb: 32 

и что, возможно, исправили ошибку ООМ (хотя, возможно, я просто не ждет достаточно долго).

Я надеялся, что Cassandra + экспоненциальный откат подавит писателя на максимальную равновесную скорость записи, но это, похоже, не происходит. Это нереалистичное ожидание для Кассандры? Я могу оценить лимит в писателе, но я не знаю, какая метрика разумна для ограничения ставок. Есть идеи?

+0

Мое поведение очень похоже на: http://stackoverflow.com/questions/21715622/large-writes-cause-instability-in-cassandra-ring. Точка 4 в ответе Русса кажется актуальной. Это все еще не объясняет, как снизить скорость записи. –

ответ

1

Это типичная проблема с кластерами Кассандры.

Я вижу это двумя способами:

  • Это Кассандры клиентов ответственность душить вниз пишет для того, чтобы не перегружать кластера. Это называется противодавление
  • Это Инженеры ответственность за создание кластера в соответствии с SLA приложения и поддержку скорости записи (и латентности).

Поскольку вы не можете иметь представление о том, как кластер будет выполнять, единственный вариант, у вас есть, чтобы применить противодавление. Отмените запись на разумную величину на уровне клиента. Это значение сильно зависит от конфигурации вашего оборудования (ну и программного обеспечения). Попробуйте значение шара (например, 3k op/s) и поднимите это значение, пока не найдете скорость записи, которая начинает перегружать ваш кластер. Вы найдете, какая скорость поддерживается вашим кластером (с вашей конкретной рабочей нагрузкой!). Если этого недостаточно для вашего приложения, разверните кластер с большим количеством узлов.

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

  • Нет связанных вопросов^_^