Технологии

Flink

Как использовать Flink для решения широкого круга задач по System Design

Многие задачи по System Design требуют потоковой обработки. У нас есть непрерывный поток данных, который нужно обрабатывать, преобразовывать или анализировать в реальном времени.

Потоковая обработка на практике сложна и дорого обходится. Многие проблемы, которые кажутся задачами потоковой обработки (stream processing), на самом деле можно свести к пакетной обработке (batch processing), где мы бы использовали такие технологии, как Spark или Hadoop.

Прежде чем приступать к разработке решения на базе потоковой обработки, задайте себе критически важный вопрос: "действительно ли нам нужна обработка в реальном времени?". Для многих задач ответ будет отрицательным, и инженеры, которые придут после вас, будут благодарны за то, что вы избавили их от проблем с эксплуатацией.

Самый простой пример - сервис, который читает клики из темы Kafka, выполняет тривиальное преобразование, например переформатирует данные для дальнейшей загрузки, и записывает результат в базу данных. Все просто.

Простая потоковая обработка с Kafka

Но дальше все быстро усложняется. Представим, что мы хотим отслеживать количество кликов пользователя за последние 5 минут. Из-за этого 5-минутного окна в нашей задаче появляется состояние. Каждое сообщение уже нельзя обрабатывать независимо, потому что нам нужно помнить количество из предыдущих сообщений. Хотя мы можем сделать это в нашем сервисе, просто сохраняя счетчики в памяти, это порождает множество новых проблем.

  • Если сервис упадет, он потеряет все состояние. По сути, счетчик за предыдущие 5 минут исчезнет. Теоретически сервис мог бы восстановиться, перечитав все сообщения из темы Kafka, но это медленно и дорого.
  • Другая проблема - масштабирование. Если мы хотим добавить новый экземпляр сервиса из-за роста нагрузки, нам нужно как-то перераспределить состояние между существующими и новыми экземплярами. Это уже довольно сложный процесс с большим количеством сценариев отказа.
  • А что, если события приходят с нарушением порядка или с задержкой? Такое вероятно, и это повлияет на точность наших подсчетов.

И дальше все становится только сложнее по мере добавления новой логики и состояния. К счастью, инженеры создают подобные системы уже не одно десятилетие и придумали полезные абстракции. Встречайте один из самых мощных движков потоковой обработки: Apache Flink.

Flink - это фреймворк для создания приложений потоковой обработки, который решает некоторые из сложных проблем, рассмотренных выше, и многие другие. Хотя о Flink можно говорить часами, в этом глубоком погружении мы посмотрим на него с двух сторон:

  1. Сначала разберем, как Flink используют на практике. Велика вероятность, что на собеседовании вам попадется задача с потоковой обработкой, и Flink будет для нее мощным и гибким инструментом, если он действительно подходит.
  2. Затем посмотрим, как Flink работает под капотом на высоком уровне. Flink снимает с вас множество сложностей, но на интервью важно понимать, как именно он это делает, чтобы отвечать на уточняющие вопросы и обосновывать свой дизайн.

Перейдите на Premium, чтобы продолжить

Разблокируйте доступ к этой статье и всем остальным материалам с NowInterview Premium

Перейти на Premium