Что такое Apache Flink?
В эпоху быстрых объемов данных различные бизнес-сценарии генерируют большие объемы бизнес-данных, и как эффективно обрабатывать эти постоянно генерируемые данные стало проблемой, с которой сегодня сталкивается большинство компаний. С открытым исходным кодом Yahoo для hadoop все больше и больше технологий обработки больших данных начали привлекать внимание людей.Например, популярный механизм обработки больших данных Apache Spark фактически заменил MapReduce в качестве текущего стандарта обработки больших данных. Однако с непрерывным ростом данных и непрерывным развитием новых технологий люди постепенно осознают важность обработки данных в реальном времени. По сравнению с традиционным режимом обработки данных потоковая обработка данных имеет более высокую эффективность обработки и возможность контроля затрат. Flink — одна из технологий, которые в последние годы разрабатывались в сообществе открытого исходного кода, которая может одновременно поддерживатьВысокая пропускная способность, низкая задержка, высокая производительностьструктура распределенной обработки.
Эволюция архитектуры данных
Как показано на рисунке, самой большой особенностью традиционной монолитной архитектуры данных является централизованное хранение данных, большинство из которых делят архитектуру на вычислительный уровень и уровень хранения.
Первоначальная эффективность монолитной архитектуры очень высока, но с течением времени бизнес становится все больше и больше, а система становится все больше и сложнее в обслуживании и обновлении База данных является единственным источником точных данных, и каждый приложение нуждается в доступе к базе данных для получения соответствующих данных.Если база данных изменится или возникнет проблема, это повлияет на всю бизнес-систему.
Позже, с появлением микросервисной архитектуры, предприятия начали использовать микросервисы в качестве архитектурной системы корпоративных бизнес-систем. Основная идея микросервисной архитектуры заключается в том, что приложение состоит из нескольких небольших независимых микросервисов, которые работают в своих собственных процессах и не зависят от разработки и выпуска. Различные сервисы могут быть построены на различных технических архитектурах, основанных на различных бизнес-потребностях, и могут быть сосредоточены на ограниченных бизнес-функциях. Как показано
Микросервисная архитектура
Сначала хранилища данных в основном строились на реляционных базах данных. Например, Oracle, Mysql и другие базы данных, но с ростом объема корпоративных данных реляционные базы данных оказались не в состоянии поддерживать хранение и анализ крупномасштабных наборов данных, потому что все больше и больше предприятий стали выбирать для построения уровня предприятия. платформы больших данных на базе Hadoop. В то же время многие SqlonСоздание различных типов приложений для работы с данными на Hadoop становится простым и эффективным.
В процессе построения корпоративного хранилища данных данные часто периодически синхронизируются из бизнес-системы на платформу больших данных.После выполнения ряда действий по преобразованию ETL окончательно формируются такие приложения, как витрины данных. Однако для некоторых приложений с высокими требованиями ко времени, таких как статистика отчетов в реальном времени, статистические результаты должны отображаться с очень малой задержкой, поэтому в отрасли был предложен набор решений архитектуры Lambda для обработки различных типов данных.
Лямбда-архитектура больших данных
Платформа больших данных включает в себя Batch Layer для пакетных вычислений и Speed Layer для вычислений в реальном времени. Например, за счет интеграции пакетных вычислений и потоковых вычислений в одну платформу Hadoop MapReduce используется для пакетной обработки данных, а Apache Storm — для обработка данных в режиме реального времени. Эта архитектура в определенной степени решает проблему различных типов вычислений, но проблема в том, что слишком большое количество фреймворков приведет к высокой сложности платформы и высоким затратам на эксплуатацию и обслуживание. Также очень сложно управлять использованием различных типов вычислительных сред на одной платформе управления ресурсами.
Позже, с появлением среды обработки распределенной памяти Apache Spark, для потоковой обработки данных был предложен режим обработки с разделением данных на микропакеты, чтобы можно было выполнять пакетные и потоковые вычисления в рамках набора вычислительных сред. Однако, поскольку сам Spark основан на пакетном режиме, он не может идеально и эффективно обрабатывать нативные потоки данных, поэтому поддержка потоковых вычислений относительно слаба.Можно сказать, что появление Spark — это, по сути, определенная степень архитектуры Hadoop. Были сделаны некоторые обновления и оптимизации.
Архитектура потоковых вычислений с сохранением состояния
Суть генерации данных - это последовательность реальных событий, разные архитектуры, упомянутые выше, на самом деле в определенной степени нарушают эту сущность, необходимо обрабатывать бизнес-данные с определенной задержкой, а затем получать точные результаты на основе бизнес-статистики данных. На самом деле, исходя из ограничений технологии потоковых вычислений, нам сложно рассчитывать и напрямую генерировать статистические результаты в процессе генерации данных, потому что это не только предъявляет очень высокие требования к системе, но и должно соответствовать высокой производительности, высокая пропускная способность, низкая задержка и многие другие цели.
Самым большим преимуществом метода, основанного на вычислениях с сохранением состояния, является то, что исходные данные не нужно снова извлекать из внешнего хранилища, чтобы выполнить полный расчет, поскольку стоимость этого метода вычислений может быть очень высокой.
Flink реализует платформу потоковых вычислений с высокой пропускной способностью, малой задержкой и высокой производительностью в реальном времени, реализуя модель потоковых вычислений Google Dataflow. В то же время Flink поддерживает высокоустойчивое к сбоям управление состоянием, чтобы предотвратить потерю состояния из-за системных аномалий в процессе расчета.Flink периодически реализует постоянное обслуживание состояния с помощью технологии распределенных моментальных снимков Checkpoints, так что даже в случае системного время простоя или аномалии могут рассчитать правильный результат.
Конкретные преимущества Flink заключаются в следующем:
- Одновременно поддерживает высокую пропускную способность, малую задержку и высокую производительность.
В настоящее время Flink является единственной распределенной средой обработки потоковых данных в сообществе с открытым исходным кодом, которая сочетает в себе высокую пропускную способность, низкую задержку и высокую производительность. Как и Apache Spark, он может учитывать только характеристики высокой пропускной способности и высокой производительности, главным образом потому, что он не может гарантировать низкую задержку в потоковых вычислениях Spark Streaming; в то время как среда потоковых вычислений Apache Storm может поддерживать только характеристики низкой задержки и высокой производительности, но не может соответствовать требованиям высокой пропускной способности. Удовлетворение трех целей высокой пропускной способности, низкой задержки и высокой производительности очень важно для сред распределенных потоковых вычислений. - Поддержка концепции времени события (Event Time)
В области потоковых вычислений оконные вычисления играют важную роль, но большая часть текущих кадровых оконных вычислений использует системное время (время процесса), которое также является текущим временем хоста системы, когда событие передается в вычислительную среду. для обработки. Flink может поддерживать расчет окна на основе семантики времени события (Event Time), то есть с использованием времени, генерируемого событием. Этот механизм, управляемый событиями, позволяет системе потоковой передачи вычислять точные результаты, даже если событие поступает не по порядку, поддерживая событие.Время исходного поколения, насколько это возможно, чтобы избежать влияния сетевой передачи или аппаратной системы. - Поддержка вычислений с отслеживанием состояния
Flink реализовал управление состоянием в версии 1.4.Так называемое состояние заключается в сохранении промежуточных данных результата оператора в памяти или файловой системе в процессе потокового вычисления.После поступления очередного события в оператор, промежуточный результат может быть получен из предыдущее состояние.Текущие результаты рассчитываются в результатах, так что нет необходимости каждый раз вычислять результаты на основе всех исходных данных, что значительно повышает производительность системы и снижает ресурсоемкость процесса расчета данных . Вычисления с отслеживанием состояния играют очень важную роль в сценариях потоковых вычислений с большими объемами данных и сложной вычислительной логикой. - Поддержка очень гибкой работы с окном (окнами)
В приложениях потоковой обработки данные являются непрерывными, и необходимо агрегировать потоковые данные в определенном диапазоне с помощью окон, например, подсчитывая, сколько пользователей нажали на определенную веб-страницу за последнюю минуту.В этом случае мы должны Определите окно для сбора данных за последнюю минуту и пересчитайте данные в этом окне. Flink делит окна на операции окна на основе типов времени, количества, сеанса и данных. Окно можно настроить с помощью гибких условий запуска для поддержки сложных режимов потоковой передачи. Пользователи могут определять различные механизмы запуска окна для удовлетворения различных потребностей.
- Отказоустойчивость на основе упрощенного распределенного моментального снимка
Flink может работать распределенно на тысячах узлов, разбивать процесс большой вычислительной задачи на небольшие вычислительные процессы, а затем распределять задачи по параллельным узлам для обработки. В процессе выполнения задачи он может автоматически обнаруживать несогласованность данных, вызванную ошибками в процессе обработки событий, такими как время простоя узла, проблемы с передачей по сети или перезапуск вычислительных служб из-за пользовательских обновлений или проблем с ремонтом. В этих случаях с помощью контрольных точек, основанных на технологии распределенных моментальных снимков, информация о состоянии во время процесса выполнения постоянно сохраняется.Если задача аварийно останавливается, Flink может автоматически восстановить задачу из контрольных точек, чтобы гарантировать, что данные обрабатываются во время процесса. . - Независимое управление памятью на основе JVM
Управление памятью является важной частью всех вычислительных сред, особенно для вычислительных сценариев с большим объемом вычислений очень важно, как управлять данными в памяти. Для управления памятью Flink реализует собственный механизм управления памятью, чтобы свести к минимуму влияние JVM GC на систему. Кроме того, Flink преобразует все объекты данных в двоичные файлы и сохраняет их в памяти посредством сериализации/десериализации.Уменьшая размер хранилища данных, он может более эффективно использовать пространство памяти и снизить снижение производительности, вызванное GC или риском ненормальных задач, поэтому Flink будет более стабильным, чем другие фреймворки распределенной обработки, и не повлияет на работу всего приложения из-за таких проблем, как JVM GC. - Сохранить очки
Для потоковых приложений, которые работают 7*24 часа, доступ к данным осуществляется постоянно, и прекращение работы приложения в течение определенного периода времени может привести к потере данных или неточным результатам вычислений, таким как обновление версии кластера, операции отключения и т. д. Стоит отметить, что Flink сохраняет моментальный снимок выполнения задачи на носителе с помощью технологии Save Points.При перезапуске задачи он может напрямую восстановить исходное состояние вычислений из сохраненных заранее точек сохранения, чтобы задача продолжала выполняться. следите за состоянием перед отключением.Технология Running, Save Points позволяет пользователям лучше управлять и работать с потоковыми приложениями в реальном времени.
Больше вычислений в реальном времени, Flink, Kafka, ES и других связанных технических сообщений в блогах, добро пожаловать, чтобы обратить внимание на потоковые вычисления в реальном времени.