Подход к разрешению тайм-аутов узла cassandra coordinator при записи

У меня есть простой кластер Cassandra с одним узлом с базовой конфигурацией пространства ключей с replication_factor=1

В этом пространстве ключей у нас около 230 таблиц. В каждой таблице примерно 40 столбцов. Скорость записи, которую мы выполняем в эти таблицы, составляет примерно 30 000 записей за пять минут всего один раз в день. У меня есть около 6 рабочих скриптов python, которые делают эти записи в любую одну таблицу за раз, и все они будут продолжать делать эти записи, пока не будут записаны все 230 таблиц за день. Сценарии используют python cassandra-driver с простым сеансом для выполнения этих операций записи. Что касается записываемых здесь данных, то их очень много nulls.

Фактически, если я прав, это можно представить как 6 одновременных подключений, делающих более 30 тыс. Записей за пять минут в день.

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

"cassandra/cluster.py", line 2030, in cassandra.cluster.Session.execute (cassandra/cluster.c:38536)
app_nstablebuilder.1.69j772led82k@swarm-worker-gg37    |   File "cassandra/cluster.py", line 3844, in cassandra.cluster.ResponseFuture.result (cassandra/cluster.c:80834)
app_nstablebuilder.1.69j772led82k@swarm-worker-gg37    | cassandra.WriteTimeout: Error from server: code=1100 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'consistency': 'ONE', 'required_responses': 1, 'received_responses': 0}

У меня вопрос о том, как подойти к решению этой проблемы. Я не могу проверить, возникла ли проблема в скриптах моих рабочих или в самом кластере Cassandra. Должен ли я замедлить своих сотрудников в выполнении их записей? Должен ли я выполнить какую-то диагностику, чтобы улучшить производительность Cassandra?

Все решения, которые я читал до сих пор, относятся к многоузловым кластерам, и я не смог найти ни одного для одноузлового кластера.

Я чувствую, что наш кластер нездоров и что мои усилия должны быть направлены на его исправление. Если так, то я не знаю, с чего начать. Может ли кто-нибудь указать мне правильное направление?

Если есть дополнительная информация, которую я мог бы предоставить, чтобы помочь, дайте мне знать.

Если я правильно понимаю, ваши скрипты вставляют нули? Если это так, то вы создаете надгробные плиты. Лучшим подходом было бы исключить из запросов эти столбцы с нулевыми значениями.

Horia 10.09.2018 16:06

@Horia, да, у вставок очень большое количество нулей. Не включение этих нулевых столбцов в запрос не приведет к появлению надгробий, не так ли? Я буду экспериментировать с этим. Как вы думаете, это поможет в решении этой проблемы?

Rahul Raghunath 11.09.2018 08:26

Вставка нулей создаст надгробные плиты. Исключение пустых столбцов из запроса не приведет к созданию надгробий. Вы можете немного почитать по этому поводу здесь. Я не уверен, что вставка нулей может вызвать это, но вставка нулей (которые могут создать надгробные плиты) определенно является проблемой и может помочь в решении проблемы, которую вы видите.

Horia 11.09.2018 11:59

Спасибо! Я потратил последние пару дней на это, и это мне немного помогло. Сейчас мы ОЧЕНЬ редко видим сбои при записи, и мы позаботились об этом с помощью методов on_write_timeouts. Большое вам спасибо: D

Rahul Raghunath 12.09.2018 11:41

Я рад, что смог помочь. Я также добавил свой комментарий в качестве ответа.

Horia 12.09.2018 13:03
0
5
168
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вставка нулей создаст надгробные плиты. Исключение пустых столбцов из запроса не приведет к созданию надгробий. Вы можете немного почитать по этому поводу здесь. Я не уверен, что вставка нулей может вызвать это, но вставка нулей (которые создавали бы надгробные плиты) определенно является улучшением, которое следует учитывать.

Другие вопросы по теме