Онлайн книга «Ты (не) в моём коде»
|
Женя откинулся на спинку стула, потёр лицо руками. Пальцы правой руки легли на часы, и указательный палец начал выстукивать по циферблату мелкую дробь. Не думаю, что Женя это замечал. — Перерыв? — спросил он с надеждой. — Да, давай, — согласилась я и пошла ставить чайник. Пока закипала вода, Женя молчал, глядя в стол. Палец всё ещё цокал по стеклу часов. — Ты была права, — сказал он наконец. — Даже хорошие резюме. Сразу тележкой, а результат — ноль на массу. Я поставила перед ним кружку. — Подумай об этом как о стихийном бедствии. Его не избежать, его надо пережить. Раз я права, значит, нужный человек найдётся. Со временем. Но если не перебрать хренову тучу кандидатов, ничего не выйдет. Он хмыкнул, но палец, наконец, остановился. — Сколько у нас ещё сегодня? — Двое. Готов? — спросила я. Женя кивнул и включил созвон. 13.2 Правильный кандидат. Тая На экране появился парень лет тридцати, может, чуть старше. Короткая стрижка, простая футболка, за спиной обычная комната, без модных постеров и искусственных фонов. Представился спокойно, без заученной самопрезентации. Женя начал по скрипту. Первые вопросы парень брал ровно, не блистал терминами, но и не плыл. Отвечал, как человек, который делал руками, а не читал про это на хабре. Потом мы дали парню кейс. Тот самый, на котором второй кандидат сыпался в тишину. — Легло три ноды из пяти, часть данных не реплицировалась. Что делаешь? Парень помолчал. Не растерянно, а так, как молчат, когда прикидывают порядок действий. — Сначала смотрю, какие именно ноды легли, мастер или воркеры. Если мастер жив, проверяю статус подов на оставшихся двух. Если данные не реплицировались, значит, скорее всего, реплика-фактор был меньше трёх или ноды выпали до того, как синк завершился. Женя чуть подался вперёд. — Допустим, мастер жив, но два воркера из трёх недоступны. Трафик идёт. — Тогда первым делом надо кордон на упавшие ноды, чтобы планировщик не пытался туда ничего раскидывать. Дальше смотрю, что с подами, которые были на тех нодах. Если есть PV, то проверяю, переехали ли данные. Если нет, руками не полезу, подниму ноды и дам кластеру самому разрулить. Он для этого и нужен. Я написала Жене в чат: «Копает, куда надо». — А если не разрулит? — спросила я вслух. Парень перевёл взгляд на меня, не дёрнулся, не растерялся. — Тогда надо смотреть логи. Конкретно — события кластера и статус PVC. Если всё совсем грустно и автоматика не справляется, полез бы в документацию, потом к коллегам. Но копать надо в сторону storage class и provisioner, потому что обычно там и зарыта собака. Женя откинулся на спинке стула. Палец по часам не стучал. — Хорошо. Теперь Kafka. У тебя дубли в топике, консьюмер вычитывает одно и то же. Почему? — Семантика at-least-once, скорее всего. Продюсер отправил, не дождался подтверждения, отправил повторно. Или консьюмер сделал обработку, но не закоммитил оффсет и при рестарте пошёл по второму кругу. — Как лечить? — Идемпотентный продюсер, enable.idempotence. На стороне консьюмера надо коммитить оффсет после обработки, не до. Если нужен exactly-once по-настоящему, транзакционный продюсер плюс read_committed на консьюмере. Но это не бесплатно, производительность просядет. Надо смотреть, насколько критичны дубли для конкретного кейса. |