Технологии
Flink
Как использовать Flink для решения широкого круга задач по System Design
Многие задачи по System Design требуют потоковой обработки. У нас есть непрерывный поток данных, который нужно обрабатывать, преобразовывать или анализировать в реальном времени.
Потоковая обработка на практике сложна и дорого обходится. Многие проблемы, которые кажутся задачами потоковой обработки (stream processing), на самом деле можно свести к пакетной обработке (batch processing), где мы бы использовали такие технологии, как Spark или Hadoop.
Прежде чем приступать к разработке решения на базе потоковой обработки, задайте себе критически важный вопрос: "действительно ли нам нужна обработка в реальном времени?". Для многих задач ответ будет отрицательным, и инженеры, которые придут после вас, будут благодарны за то, что вы избавили их от проблем с эксплуатацией.
Самый простой пример - сервис, который читает клики из темы Kafka, выполняет тривиальное преобразование, например переформатирует данные для дальнейшей загрузки, и записывает результат в базу данных. Все просто.
Но дальше все быстро усложняется. Представим, что мы хотим отслеживать количество кликов пользователя за последние 5 минут. Из-за этого 5-минутного окна в нашей задаче появляется состояние. Каждое сообщение уже нельзя обрабатывать независимо, потому что нам нужно помнить количество из предыдущих сообщений. Хотя мы можем сделать это в нашем сервисе, просто сохраняя счетчики в памяти, это порождает множество новых проблем.
- Если сервис упадет, он потеряет все состояние. По сути, счетчик за предыдущие 5 минут исчезнет. Теоретически сервис мог бы восстановиться, перечитав все сообщения из темы Kafka, но это медленно и дорого.
- Другая проблема - масштабирование. Если мы хотим добавить новый экземпляр сервиса из-за роста нагрузки, нам нужно как-то перераспределить состояние между существующими и новыми экземплярами. Это уже довольно сложный процесс с большим количеством сценариев отказа.
- А что, если события приходят с нарушением порядка или с задержкой? Такое вероятно, и это повлияет на точность наших подсчетов.
И дальше все становится только сложнее по мере добавления новой логики и состояния. К счастью, инженеры создают подобные системы уже не одно десятилетие и придумали полезные абстракции. Встречайте один из самых мощных движков потоковой обработки: Apache Flink.
Flink - это фреймворк для создания приложений потоковой обработки, который решает некоторые из сложных проблем, рассмотренных выше, и многие другие. Хотя о Flink можно говорить часами, в этом глубоком погружении мы посмотрим на него с двух сторон:
- Сначала разберем, как Flink используют на практике. Велика вероятность, что на собеседовании вам попадется задача с потоковой обработкой, и Flink будет для нее мощным и гибким инструментом, если он действительно подходит.
- Затем посмотрим, как Flink работает под капотом на высоком уровне. Flink снимает с вас множество сложностей, но на интервью важно понимать, как именно он это делает, чтобы отвечать на уточняющие вопросы и обосновывать свой дизайн.
Перейдите на Premium, чтобы продолжить
Разблокируйте доступ к этой статье и всем остальным материалам с NowInterview Premium
Перейти на Premium