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