Я – Дата Инженер | Евгений Виндюков
رفتن به کانال در Telegram
💵 Как стать Data Engineer 🗄 Смотри Roadmap в закрепе! _____________________________ Автор @halltape Все вопросы по рекламе @k_shredinger
نمایش بیشتر6 029
مشترکین
+224 ساعت
+427 روز
+9930 روز
آرشیو پست ها
Как читать эту вашу Кафку?
Сейчас будут замороченные и сложные вещи, но постараюсь написать максимально просто. Итак, у нас есть таблица в PostgreSQL. В неё каждую минуту приходят изменения: какие-то строки добавляются, какие-то обновляются, а какие-то удаляются.
Все эти изменения Debezium моментально или почти моментально подхватывает из журнала транзакций PG. Как это настроить, я покажу на буткемпе. Сейчас это не так важно. В итоге в Kafka у нас появляется топик. Это просто журнал, куда прилетают сообщения - буквально JSON с данными из PG.
Внутри сообщения есть доп информация о строке: она была добавлена, изменена или удалена. Внутри топика может быть несколько партиций. Можно сделать одну партицию, а можно несколько. Это значит, что сообщения из PG будут раскидываться по условным «папочкам» внутри Kafka. Причём раскидываются они не случайно, а по ключу, который мы сами укажем. Например, отлично подойдёт
id из PG. Тогда сообщения с одинаковым id будут попадать в одну и ту же партицию.
Но тут есть нюанс: ключ не гарантирует, что сообщения реально распределятся поровну. Если один ключ встречается намного чаще остальных, может появиться перекос и одна партиция будет загружена сильнее других.
Супер. Мы научились отслеживать любые изменения в базе данных.
Теперь хотим забирать эти данные в ClickHouse в реальном времени.
Я рассказываю на примере многошардового ClickHouse, который, кстати, есть у нас на буткемпе в @bootcampych_bot.
У нас два шарда и две реплики:
Шард 1: clickhouse01 clickhouse02 Шард 2: clickhouse03 clickhouse04Сначала создаём локальную таблицу в ClickHouse. Это просто обычная таблица с нашими привычными полями. Кстати, обязательно пишем
ON CLUSTER, чтобы таблица создалась на всех узлах кластера. Потом создаём таблицу Distributed. Это такая таблица-ссылка на локальные таблицы, которая умеет отправлять запросы и вставки на нужные шарды.
ЭТО ЕЩЁ НЕ ВСЁ!
Надо создать таблицу Reader с движком Kafka. То есть тот самый читатель, который будет смотреть в Kafka-топик и забирать оттуда сообщения. И тут же надо указать количество consumers (КОНСЬЮМЕР ЭТО ТИПА ПОТРЕБИТЕЛЬ В РАМКАХ READER). Короче консьюмеры параллельно умеют читать Кафку. Если в топике три партиции и consumers тоже три, то Kafka обычно распределит эти партиции между тремя consumers. А если партиций три, но consumers десять, то одновременно работать смогут только три consumer’а. Остальные семь будут без дела простаивать. Надеюсь, вы уже запутались.
ЭТО ЕЩЁ НЕ ВСЁ!
Надо создать Materialized View. Это специальный объект, который реагирует на появление новых данных в таблице-источнике. Он может взять сообщение из Kafka, распарсить JSON, немного преобразовать данные и сразу записать их в нашу Distributed-таблицу. И уже Distributed сама отправит данные на нужный шард.
В итоге схема выглядит примерно так:
PostgreSQL
↓
Debezium
↓
Kafka
↓
Kafka Engine
↓
Materialized View
↓
Distributed
↓
Локальные таблицы ClickHouse
Казалось бы, всё! Но дальше начинаются классические проблемы.
А что если consumer не успевает за всеми новыми сообщениями и отставание между поступившими и обработанными сообщениями начинает расти? Это называется consumer lag. Тут можно увеличить количество партиций или добавить consumers — но только если свободные партиции ещё есть. Если партиций три, то десять consumers ситуацию не спасут. Также нужно искать настоящее бутылочное горлышко: может тормозить парсинг JSON, Materialized View, вставка в ClickHouse, сеть, диск или CPU.
Ну и, конечно, надо грамотно выбрать ключ для распределения сообщений по партициям. Иначе можно получить перекос данных, когда одна партиция будет забита, а остальные будут скучать.
А ещё может произойти такая ситуация. ClickHouse забрал сообщение из Kafka и записал данные в таблицу, но потом упал до того, как успел зафиксировать offset — то есть позицию, на которой он остановился. После восстановления он может прочитать это сообщение ещё раз. И вот у нас появляются дубликаты.
Тут может помочь ReplacingMergeTree или ReplicatedReplacingMergeTree.
Но важно понимать: дедупликация происходит не сразу, а в фоновом режиме во время merge-операций. То есть некоторое время в таблице могут существовать несколько версий одной и той же строки. Если нужно получить чистый результат прямо сейчас, используют FINAL или специальные конструкции с argMax. А для нормальной дедупликации нужно правильно выбрать ключ в ORDER BY и добавить версию записи.
Удаления из PostgreSQL тоже нужно обрабатывать отдельно. Обычно они приходят как специальное событие с признаком удаления, а в ClickHouse уже нужно решить, как именно такие строки учитывать.
Короче, непросто.
Там есть ещё всякие транзакции, compaction, retention...
В целом я сегодня разбирался со всем этим у нас на BootCamp.
Думаю, на ноябрьском потоке попробую провести отдельную лекцию и показать хотя бы небольшую часть этой схемы на практике.
Как изменения появляются в PostgreSQL, попадают в Kafka, читаются ClickHouse, распределяются по шардам и реплицируются на другие узлы.
@bootcampych_bot — для тех, кто хочет попасть на ноябрьский поток.
Мы всё ещё принимаем заявки!АЛАРМ! У кого Codex в VSCode сломался?
Захожу в VScode, его нет. Пытаюсь установить, не ставится. Точнее долго очень устанавливается и непонятно, поставится ли вообще.
У кого также? и кстати может пора переходить на KIMI, учитывая недавнюю блокировку от Антропика. Куда идет тенденция.
ВОТ ПРОГРАММИСТЫ! ОТБЕРИ У НИХ ИГРУШКУ И ОНИ БЕЗРУКИЕ!
Кто-то видел Инмона?
Попросил ИИшку сделать картинку про разность Инмона, Кимбала, Data Vault и якорь.
Вышло так, что при Инмоне вы сначала делаете 3нормальную форму. Короче очень детально разбираете все данные и раскладываете по разным таблицам. И только потом строите звезду или снежинку и витрины данных.
В кимбале этого центрального слоя нет. Скачали данные из источника, почистили и сразу звезду или снежинку. Путь до витрины становится короче.
Ну Дата Волт или Якорь - это более замороченные истории. Тоже сначала делаем эту модель и только потом звезды и снежинки с витринами.
Так вот вопрос. Кто был в тех командах, где прям Инмон и нормализация? Чтобы четко строго все настроено и все следят за этим? Это точно не теоретический подход? Типа только в книжках существует. А на деле ДЕШники просто грузят сыряк и потом тут же строят из него витрины.
И если никто не строит и не придерживается этого… может и забыть в целом? Как про map reduce и pentaho integration?
Как стать Дата Инженером в 2027 году?
Видос скорее для начинающих и тех, кто вкатывается в профессию.
Прошелся по всем шагам и рассказал, что сейчас актуально и где это все учить.
🎞 https://youtu.be/dvhndw6-AD0
хочешь на BootCamp?
➡️ @bootcampych_bot
В Дата Инженеры еще берут или уже поздно?
Мы провели стрим, где обсудили НАСУЩНЫЕ ВОПРОСЫ
🎞 Запись СТРИМА уже на YOUTUBE
Какие вопросы, например, были на стриме
- Реально ли выйти на 300 000 рублей без опыта?
- Не поздно ли входить в Data Engineering в 41 год?
- Почему вам не отвечают на отклики?
- Алгоритмы или инструменты: что спрашивают на собеседовании?
- Можно ли перейти из QA или аналитики в Data Engineering?
- Какую зарплату просить на Middle-позиции?
И многое другое...
P.S. запись на Ноябрьский BootCamp - @bootcampych_bot
СТРИМ ССЫЛКА
▶ https://www.youtube.com/live/NpixmPqeuME?si=NhwYcKzcStN05y2D
Заходим
СЕГОДНЯ СТРИМ 21 ОКТЯБРЯ 20:00 МСК
- А насколько глубоко нужно знать Python и SQL?
- Что писать в резюме?
- Какой пет проект сделать?
- Как учатся на BootCamp?
- Сколько лет опыта сейчас нужно для рынка?
- Рекрутер просит выписку из трудовой, что делать?
- Сколько просить денег?
▶️ Ссылку скинем ближе к началу СТРИМА!
Запись будет!
Clickhouse для программистов, аналитиков и инженеров данных
Перестаньте ждать, пока считается аналитика. Научитесь использовать ClickHouse — СУБД, которая превращает минутные аналитические запросы в ответы за доли секунды. С первого дня — доступ к инфраструктуре для практики.
🌐 Чему вы научитесь:
🤩 Архитектура одиночных и кластерных инсталляций ClickHouse: как устроена система изнутри и как масштабировать её под реальные нагрузки
🤩 Хранение данных: движки MergeTree, партиционирование и сжатие — как держать терабайты аналитических данных при минимальных затратах на инфраструктуру.
🤩 Обработка миллиардов строк за секунды: построение эффективных запросов, агрегаций и материализованных представлений.
🤩 ClickHouse в продакшене: использование в приложениях, продуктовой аналитике и типичные грабли, на которые наступают почти все
🤩 Живая практика без отрыва от работы: не более 2-3 часов в неделю, разбор задач с экспертом в групповом чате.
🥸 Кто мы: R&D-центр Devhands. Автор курса — Алексей Белозерский, Chief Data Officer в inSales (СБЕР 2В), ex: VK Tech, М.Видео, Эльдорадо
🗓 Старт курса: 29 октября, 6 недель обучения.
Изучить программу и записаться можно здесь.
Ждём вас!
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtlqeLD5Ok
СТРИМ 21 ОКТЯБРЯ 20:00 МСК
- А насколько глубоко нужно знать Python и SQL?
- Что писать в резюме?
- Какой пет проект сделать?
- Как учатся на BootCamp?
- Сколько лет опыта сейчас нужно для рынка?
- Рекрутер просит выписку из трудовой, что делать?
- Сколько просить денег?
Уже в эту среду 21 октября СРЕДА 20:00 МСК предлагаю подключиться к нашему СТРИМУ на Youtube
Будем разбирать все насущные вопросы + отвечать все про BootCamp.
Запись будет!
➡️ Кстати, кто хочет запрыгивать на Ноябрьский поток пораньше, смело пишите в @bootcampych_bot
Мы уже набираем поток
Для тех, кому @bootcampych_bot не дает PDF с лайвкодинга.. держите
Мы перевезли бота в новый сервис, но там еще не все хранилище переехало.
Дата Инженеры ВСЁ?
Кто хочет на BootCamp, особенно на ноябрь, ВНИМАНИЕ!
Наш бот @bootcampych_bot работает не совсем стабильно. Потому что CRM изначально настроена на серверах Yandex. А у них, как вы понимаете, не самые сейчас лучшие времена. Поэтому бот может немного тупить и тормозить.
Поэтому, если вам хочется уже оплатить буткемп и залететь на Ноябрьский поток, то смело пишите нам в лс @halltape и @shustDE
Мы подскажем, как правильно оплатить. Возможно только рассрочка Яндекс Сплит не будет доступна. Ну тут наши полномочия сами понимаете.
Во всем остальном у нас инфраструктура работает штатно. Все боты, дающие доступы, BootCamp, InfraSharing работают, как обычно. Тут могла бы быть реклама нашего провайдера, кстати :)
🔴 Еще раз продублирую @halltape и @shustDE!
Что там с Яндексом?
Инфраструктура наших дата-центров повреждена, поэтому в работе сервисов Яндекса могут быть сбои..Смотрите, у каждого облачного провайдера можно купить готовую Базу Данных, которую за вас развернут на серверах, включат.. вы только деньги платите. Это очень удобно, потому что не надо ни о чем думать в плане поддержки БД. НО как только у провайдера возникают проблемы, вы соответственно сразу починить это не сможете. Только через тех поддержку. А там может быть долгое ожидание. В итоге бизнес простаивает и теряет деньги. Поэтому есть вариант второй. Взять в аренду у провайдера сервер и самим установить базу и самим ее обслуживать и следить. Нанимайте Девопса и платите ему зарплату. Или вариант еще купить отдельно стойку с сервером и поставить к себе в офис. Тогда вообще супер. Можно хоть под землю его поместить и никто его там не достанет. Но тогда вопрос сколько это будет стоить и еще надо будет помимо девопса реального инженера нанимать, а может и целую команду. Потом еще бесперебойники ставить. Короче это прям ваш собственный Дата Центр выходит. Можете об этом обо всем в видео глянуть. Что лучше выбирать и в чем плюсы-минусы. А так, завтра наверняка все будут проверять свои pipeline и фиксить упавшие джобы. Всем терпения и удачи! На яндексе знаю, что много кто сидит.. Даже банально S3 хранилище очень много у кого. Про Спарки и Кликхаусы вообще молчу. Вероятно, придется переезжать на других провайдеров, но хватит ли всем места и ресурсов — это большой вопрос... Что думаете?
Собес на 350к на руки на Дата Инженера!
▶️ https://youtu.be/sVE2loLR-OY
Выложил собес. Все голоса я изменил. Никаких перс данных. Только вопросы с собеса.
Там я вставил слева карточки с пояснениями во время вопросов. Но на те, что я ответил, ничего не добавлял.
🔴 Задачи с собеса доступны в нашем
@bootcampych_bot по команде /livecoding350
Просто отправь ему это и он скинет задачки. Там задача по SQL и Python
StackOverflow ВСЁ!
В 22-23 году я еще активно ходил на стек оверфлоу. Особенно помню, когда изучал язык Си. И мне надо было найти инфу про выделение памяти. Как же меня выручали треды с ошибками, которые были у людей до меня!
Буквально копируешь текст ошибки в гугл строку и дальше по первой ссылке на стек оверфлоу находишь ветку, где ту же самую проблему решил какой-то индус.
Помню, как в первый раз увидел ChatGPT в ноябре 2023 года и попросил его тогда написать бинарный поиск на Си. Помню, как на собесе при просмотре Пет проекта спрашивали, а не написал ли я его с чатом гпт?!?!
Кстати, тогда я только пару функций сделал с нейронкой. Всё остальное печатал вручную. Помню, что даже тот код я писал в Сапсане из МСК в Питер. Это было круто. Мозг сильно погружался в типы данных и алгоритм с логикой.
Сейчас конечно все ошибки, логи, вопросы задаю в ЛЛМ. Буквально все. Как же сильно поменялось поведение поиска проблемы в коде. А еще можно пойти дальше и подключить агента, просить его самому вытягивать логи и фиксить падения пайплайнов.
Я точно не являюсь ретроградом. Мне всегда нравились новые технологии, фишечки, приколы, поэтому я конечно давно перестал заглядывать на стек оверфлоу. Вполне вероятно, что ЛЛМ сама обучена на правильных ответах. Но факт в том, что нейронка хорошо помогает. Правда теряется навык глубинных знаний. Ну это реально.. уже начинаешь более абстрактно думать и решать задачи.
Раньше я помнил, какой типа данных у меня возвращается функция. Сейчас знаю только то, что делает целый файл. А вот какой там метод используется - в целом по барабану.
Что думаете? Или ЗАПРЕТИТЬ!
А что думаете насчет того, чтобы отвечать на собесе вместе с нейронкой? Все равно же на работе будут использовать
Все сидят на S3!
Если сейчас вы ходите по собесам, то почти везде либо сидят на S3-хранилище, либо планируют на него переехать.
И вот тут важно понимать, что S3 — это не просто «папка в облаке, куда можно закинуть файлик». Давайте поясню.
Представьте, что у нас есть есть у нас разные источники:
📍 API
📍 базы данных
📍 логи приложений
📍 внешние системы
📍 какие-то файлы от пользователей
И всё это добро мы складываем в S3.
Например, pipeline дата-инженера может выглядеть так:
API → S3 raw → Spark/PySpark → S3 processed → ClickHouse
Сначала данные попадают в бакет raw в исходном виде. Потом ETL-процесс забирает их из S3, преобразует и сохраняет результат в processed.
Причём в S3 можно хранить не только сами данные.
Туда же можно положить:
— логи
— резервные копии
— JAR-файлы с кодом на Scala для Apache Spark
— Python-файлы для запуска PySpark-задач
Получается довольно универсальный слой. В одном месте лежат исходные данные, обработанные данные, код и результаты работы.
И по факту далеко не все команды (даже меньшая часть) разворачивают свой собственный open source MinIO.
Потому что запустить MinIO несложно. Дальше начинаются диски, серверы, репликация, мониторинг, бэкапы, отказоустойчивость, доступы и так далее.
В итоге у компании появляется ещё один сервис, который нужно постоянно поддерживать.
А бизнесу, если честно, обычно всё равно, MinIO там внутри или какой-то другой S3. Ему нужно, чтобы данные надёжно хранились, быстро читались и были доступны нужным системам.
Поэтому многие выбирают облачный Object Storage.
Например, в MWS Cloud Platform есть S3-совместимое Object Storage. Это значит, что для работы можно использовать привычные AWS CLI, SDK и другие инструменты. Не нужно переписывать весь pipeline только потому, что изменилось хранилище.
Данные в MWS хранятся в двух дата-центрах с избыточной репликацией. Есть автоматическое шифрование, версионирование и управление жизненным циклом объектов.
Можно выбрать класс хранения под задачу:
— стандартный — для приложений и регулярного доступа;
— тёплый — для датасетов, аналитики и машинного обучения;
— холодный — для архивов, логов и резервных копий.
А это платно?
Да. Представьте, что вы покупаете доступ к готовому хранилищу, которое за вас уже настроено. Если вы просто загрузили данные и храните их, основная плата будет именно за занятый объём. Дополнительно учитываются только обращения к файлам и скачивание данных из хранилища. Загрузка данных в Object Storage не тарифицируется как исходящий трафик.
То есть если вы положили в S3 датасет, JAR-файл для Spark или Python-скрипт для PySpark и почти не скачиваете их, стоимость будет в основном зависеть от объёма хранения и выбранного класса — стандартного, тёплого или холодного.
Подробнее о тарификации MWS
Короче, S3 это прям современный инструмент для Дата Инженера. Это я еще не говорю о надстройках, которые можно навесить поверх.
Протестировать MWS Cloud Platform
ИИ всех уже заменил. Просто вы ещё не заметили
Каждую неделю выходит новый ИИ. Естественно, читаешь новости об этом в разных пабликах ИЛИ особено в тредс - там ощущение, будто люди уже полностью перешли на искусственный интеллект.
Со стороны кажется, что ВСЁ! Нейронки заменили ВСЕХ! НА ЗАВОД!
А потом смотришь на реальность. Человеки все еще ведут дела в Excel, используют гугл таблицы, продают вручную через менеджеров по продажам.. И где эти все АГЕНТЫ ИИ я не понимаю. Вот я ОСАГО например купил и там коэфициент неверный стоит у водителя.. Я пишу в поддержку, что поменяйте. Мне естественно отвечают люди.
Т.е. сто процентов появится рано или поздно мощный джарвис, который будет работать, не как АЛИСА! Хотя Алису я вообще не воспринимаю, как конкурент OpenAI.. Мне кажется ChatGPT просто улетел в космос вместе с Гроком. Иногда можно просто букву написать, условно, и тебя уже понимают, что ты хочешь. Но пока я вижу, что реально пользуются всеми этим агентами либо погромисты, либо гики, которые любят все новое и современное. Обычные люди либо бояться до этого докасаться, либо просто не хотят ничего менять в своей жизни. Оно и так работает! Получку получил, пивка тяпнул, футбольчик глянул, да на боковую.. Эти ваши все технологии, как и Интернет.. он нам нах НЕ НУЖОН (цитируя классиков).
Что по поводу компаний?
Если раньше ты делал одну задачу неделю, а теперь с помощью ИИ закрываешь её за два дня, бизнес не всегда говорит:
"Супер, ну отдыхай оставшиеся три дня"
Он говорит:
"Раз ты теперь быстрее, вот тебе ещё пять задач"
И в итоге ты не стал работать меньше. Ты просто стал закрывать гораздо больший объём. Типа повышается планка того, сколько работы от тебя теперь ожидают.
ИИ действительно помогает нам работать меньше?
Или он просто позволяет бизнесу загрузить нас ещё сильнее?
У вас в компаниях уже разрешают использовать ИИ? Стали работать быстрее? Или просто задач стало больше?
@bootcampych_bot
Кстати, 1 ноября стартует новый поток нашего BootCamp.
Если давно думаете вкатиться в Data Engineering — переходите в нашего бота и записывайтесь.
До старта ещё есть время, но набор уже активно идёт.
