Привет! Меня зовут Артемий, я инженер в команде Processing, веду фичатрек по развитию FlinkSQL в Авито. Мы занимаемся обработкой данных в реальном времени, и наша основная технология — Apache Flink. Основные клиенты внутри компании — аналитики. Вместе мы решаем бизнес-задачи, где важна минимальная задержка и скорость принятия решений.

Случались ли у вас ситуации, когда даже минимальная задержка в обработке данных оказывается критичной — утекает бюджет, фрод успевает нанести ущерб, теряются заказы? Хочется прямо на ходу объединить несколько потоков данных, увидеть метрику «здесь и сейчас» и сразу принять решение — остановить промо, подправить ставки или ограничить подозрительную активность. Но времени на долгую разработку нет.

Если хотя бы на один вопрос ваш ответ «да», значит, эта статья для вас. Сегодня я расскажу про инструмент, который мы развиваем в Avito — FlinkSQL. Он использует потоковые данные для аналитики в реальном времени: метрики, временные срезы, A/B-расчеты, поиск аномалий. Все это на привычном SQL, чтобы команда видела картину и могла действовать сразу.

Содержание:

Apache Flink

Apache Flink — это распределенный движок на Java для потоковой обработки данных в реальном времени.

Его сильные стороны — это stateful-обработка, масштабируемая архитектура, поддержка семантики времени события, окон и exactly-once семантики. Все это позволяет строить потоковые задачи на масштабе Big Data.

Кстати, если вам интересно погрузится во внутрянку Flink, то рекомендую посмотреть доклад Валентины Предтеченской — лида нашей команды — на SmartData.

Гибкость Flink безусловный плюс, но для аналитика она часто становится барьером. Чтобы реализовать даже простую задачу на «чистом» Flink, нужен язык программирования и полноценный цикл разработки. Обычно процесс выглядит так:

  • появилась потребность →

  • аналитик описал задачу →

  • разработка взяла в работу →

  • тесты →

  • приемка →

  • запуск.

Такой путь оправдан, когда требуется сложная оптимизация, но часто важнее просто получить решение быстро. Например, если нужно что-то проанализировать в моменте, проверить гипотезу, выполнить ad-hoc переливку и т.д. 

Тут еще больше контента

В таких случаях помогает FlinkSQL. Он запускает те же задачи Flink, но описанные привычным SQL. Это снижает порог входа для аналитиков и ускоряет доставку ценности, так метрики и срезы считаются в реальном времени, решения принимаются быстрее, риски и финансовые потери уменьшаются.

Flink активно развивается сообществом. Его используют крупные игроки в e-commerce, ride-hailing и adtech. Uber создал SQL-платформу AthenaX для стрим-аналитики, Pinterest применяет Flink в рекламе, экспериментах и Trust & Safety, Netflix развивает Keystone для персонализации и ETL (там SQL не основной интерфейс, но Flink — ключевая часть экосистемы), Alibaba использует Flink в антифрод, поиске, логистике и т.д. Мы в Avito тоже строим real-time аналитику и последовательно расширяем ее возможности через FlinkSQL.

Как это работает

FlinkSQL запускается как обычный SQL-запрос, который компилируется в задачу Flink и разворачивается в Kubernetes-кластере в виде JobManager и набора TaskManager с помощью Flink Kubernetes Operator.

О последнем я расскажу в следующей статье.

Для работы в реальном времени доступны:

  • оконные функции HOP/TUMBLE/SESSION, которые считают метрики по временным интервалам с регулярным обновлением;

  • использование так называемых watermark-ок, которые позволяют учитывать опаздывающие события при расчетах;

  • дедупликация выражается в SQL через оконные ранги, top-N и выбор «последнего по ключу»;

  • temporal join FOR SYSTEM_TIME AS OF возвращает значения справочника на момент события, а также поддерживают и соединения поток–поток;

  • для детекции последовательностей доступен MATCH_RECOGNIZE.

Источники и приемники подключаются через коннекторы: чтение и запись в очереди сообщений, базы данных, выгрузка результатов в lakehouse. Поддерживаются exactly-once и сохранение состояния. В каждой новой версии Flink возможности FlinkSQL активно расширяются. Например, недавно добавили интеграцию с ML и Python API, что позволяет делать предсказания и анализ данных прямо в стриме.

Жми сюда!

Как нам помогает FlinkSQL в Авито?

Мы часто работаем с промо и спецпроектами, где необходимо принимать решения в формате «здесь и сейчас». FlinkSQL позволяет аналитику самому описывать правила с помощью привычного SQL, запускать запрос на потоке событий и видеть эффект уже через секунды. Параметры можно менять сразу, без долгой разработки и релизов, а результат виден тут же. Так снижается TTM (time to market), так путь от идеи до результата превращается в одну короткую итерацию. Это улучшает self-service для команды аналитики — меньше зависимости от инженеров, больше self-service.

Еще один яркий кейс — realtime feature store. Команда ML-инженеров собирает признаки для моделей почти без задержки благодаря FlinkSQL. Раньше многие признаки обновлялись раз в сутки в других хранилищах — теперь это минуты. Качество скоринга растет за счет свежести данных.

Часто условие в FlinkSQL используется как триггер, например, при его срабатывании запускается модель, берет контекст из того же потока и сразу возвращает результат. Для аналитиков/ml-инженеров это привычный инструмент — все на знакомом SQL, окна и временные срезы задаются прямо в запросе, счетчики считаются на лету. Благодаря интеграции с нашей платформой аналитики и ML-инженеры запускают FlinkSQL запросы самостоятельно. Это также значительно снижает time to market и повышает уровень self-service, при этом логика остается прозрачной и эффективной.

А что насчет UI?

Все эти возможности мало что дают без удобного интерфейса для работы. Нужна подсветка синтаксиса, потоковый вывод результата прямо в ячейке, управление запуском и остановкой задач и простая отладка. Мы перебрали несколько вариантов и остановились на Apache Zeppelin. Он дает понятный интерфейс в формате привычных ноутбуков вроде Jupyter — создаешь notebook, пишешь SQL, запускаешь, смотришь результат в реальном времени.

Благодаря этому любой аналитик или инженер может запускать FlinkSQL без ожидания разработчиков. В одном окне — совместная работа и легкая визуализация результатов во время расчета. Похожий подход с ноутбуками предлагают и решения на базе Flink, в том числе облачные продукты от Amazon Web Services.

Кликни здесь и узнаешь

Напутственное слово

FlinkSQL в Avito уже стал рабочим инструментом, который помогает нам действовать быстрее и эффективнее. Мы видим, как привычный SQL в связке с потоковыми данными сокращает путь от идеи до результата: аналитик может сам описать правило, запустить запрос и буквально через секунды увидеть эффект. Для бизнеса это означает меньше рисков, меньше потерь бюджета и заметное ускорение TTM.

Но, пожалуй, самое важное — это новый уровень самостоятельности команд. Когда аналитики (и не только) не ждут разработки, а могут сами запускать эксперименты и управлять потоками, скорость принятия решений растет в разы. Self-service перестает быть красивой идеей и превращается в практику, которая реально работает.

Если вы работаете с задачами, где критична каждая секунда, попробуйте взглянуть на FlinkSQL ближе. Возможно, именно этот инструмент откроет для вас новые возможности и поможет принимать решения тогда, когда они действительно важны.

А если хотите вместе с нами помогать людям и бизнесу через технологии — присоединяйтесь к командам. Свежие вакансии есть на нашем карьерном сайте.

Комментарии (0)