184 похожих чатов

Всем привет! Недавно обнаружили, что после вставки большой пачки через

clickhouse-client в редких случаях встречаем странное поведение. А конкретно - пачка вставляется, но вставщик получает ошибку по таймауту, дальше срабатывает уже самописная логика где идёт перевставка пачки снова. Это ведет к дублям данных. Выглядит это так:
insert_error=$(cat $ FILE | clickhouse-client --receive_timeout=180 --send_timeout=180 --host $CH_HOST -u $CH_USER --password $CH_PASSWORD --port $CH_PORT 2>&1)
STATUS=$?
if [ $STATUS -eq 0 ]; then
отстук метрики
else
вставляем снова через 180 секунд
fi
В штатном режиме пачки хоть и больше ляма строк, но вставляться за минуту успевают в большинстве. Исключение составляют затупы сети, либо зукипера, либо самого клика.
Можно ли эту проблему обойти каким то образом? Почему клик может не отдавать успешный статус код, если он вставил пачку? Или это баг и нужно открывать тикет на гитхабе? Это пограничные неприятные случаю из-за которых приходиться мутации вызывать с удалением данных.
Вот пример ошибки в таким моменты:
Code: 209. DB::NetException: Timeout exceeded while reading from socket (159.69.160.212:9000): while receiving packet from 150.60.150.210:9000
Версия сервера - 22.2.2.1
Версия клиента - 21.2.2.8

14 ответов

29 просмотров

главное правило вставки - не расчитывать что ваша вставка пройдёт, ибо никаких гарантий клик не даёт и дубли это частое явление поэтому мы например всегда пишем через промежутучную таблицу а потом просто партицию копируем если вствка прошла

Илья-Максимов Автор вопроса
Konstantin Ilchenko
главное правило вставки - не расчитывать что ваша ...

Клик не даёт гарантий вставки если она асинхронная, у нас же проставлен параметр ожидать вставки пачки во все реплики и оно работает в 99% случаев. Но раз в пару месяцев стреляет неприятно

Илья Максимов
Клик не даёт гарантий вставки если она асинхронная...

если синхронная - тоже никаких гарантий. Если у вас большая пачка вставляется, часть данных может вставиться, а часть упадёт тут вот можете поиграться с настройками для атомарной вставки https://kb.altinity.com/altinity-kb-queries-and-syntax/atomic-insert/#insert-with-adjusted-settings-atomic

Konstantin Ilchenko
если синхронная - тоже никаких гарантий. Если у ва...

Ну всмысле, если клику ты отдал данные, а он тебе ответил ок, это разве не гарантия?

Константин
Ну всмысле, если клику ты отдал данные, а он тебе ...

если ОК вернул, то всё хорошо, но ретраить вставку если была ошибка - плохая идея обычно)

Konstantin Ilchenko
если ОК вернул, то всё хорошо, но ретраить вставку...

Но ведь, он сохраняет хэш последних вставок и если ты ретрайнишь, то в теории он может понять, что это одно и тоже и не вставить

Константин
Но ведь, он сохраняет хэш последних вставок и если...

для этого надо одинаковыми блоками вставлять, иногда это тяжело повторить

Илья-Максимов Автор вопроса
Konstantin Ilchenko
если ОК вернул, то всё хорошо, но ретраить вставку...

Дык а как тогда манажить вставкой, если произошла ошибка? Руками идти смотреть system.query_log?

Илья Максимов
Дык а как тогда манажить вставкой, если произошла ...

мы исходим из самого плохого варианта, часть данных вставилась поэтому вставка в таблицу tmp со структурой такой же как и в основной таблице truncate table tmp insert into tmp alter table main attach partition from tmp если что-то идёт не так при вставке, мы просто ретраим, таблица затранкейтится и дуюлей не будет

Илья-Максимов Автор вопроса
Konstantin Ilchenko
мы исходим из самого плохого варианта, часть данны...

понял, в моём случае одновременно работают 10+ вставщиков, поэтому не уверен что такая схема прокатит, но на карандаш идею взял, спасибо

Илья-Максимов Автор вопроса
Konstantin Ilchenko
мы исходим из самого плохого варианта, часть данны...

Кстати. А как текущая схема спасает когда "часть данных вставилась"? Вот прошла чистка, вы вставили пачку, а там 50% дошло и вставилось, далее аттач?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта