Введение в управление состоянием Flink и механизмы отказоустойчивости

Flink

Автор: Ши Сяоган

Эта статья взята с конференции Flink Meetup, состоявшейся в Пекине 11 августа 2018 года. Об этом сообщил Ши Сяоган, который в настоящее время занимается исследованиями и разработками Blink в команде Alibaba Big Data и в основном отвечает за исследования и разработка технологий, связанных с управлением состоянием Blink и отказоустойчивостью.

Основное содержание этой статьи следующее:

  • Потоковая обработка данных с сохранением состояния;

  • Государственный интерфейс во Flink;

  • Реализация механизма управления состоянием и отказоустойчивости;

  • Введение в работу, связанную с Али;

1. Потоковая обработка данных с сохранением состояния

1.1 Что такое вычисления с отслеживанием состояния

Результат вычислительной задачи зависит не только от входных данных, но и от ее текущего состояния.На самом деле, большинство вычислений являются вычислениями с сохранением состояния. Например, wordcount, учитывая несколько слов, вычисляет их количество, что является очень распространенным бизнес-сценарием. В качестве вывода используется количество.Во время процесса вычисления вход должен непрерывно накапливаться до счета, тогда счет является состоянием.

1.2 Традиционным системам потоковых вычислений не хватает эффективной поддержки состояния программы.

  • Хранение и доступ к данным о состоянии;

  • Резервное копирование и восстановление данных состояния;

  • Разделение данных о состоянии и динамическое расширение;

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

Для потоковых вычислений очень высокие требования к State, потому что вход в потоковую систему — это неограниченный поток, который будет работать долго, даже дни или месяцы без простоев. В этом процессе необходимо хорошо управлять данными состояния. К сожалению, в традиционных системах потоковых вычислений поддержка управления состоянием не очень полная. Например, в Storm нет поддержки состояния программы, опциональное решение — реализовать его по типу storm+hbase, хранить данные о состоянии в Hbase, снова считывать данные о состоянии из Hbase во время расчета и обновлять их в записи. иди в. Это будет иметь следующие проблемы

  • Задачи системы потоковых вычислений и хранилища данных Hbase могут находиться на разных машинах, что приводит к снижению производительности. Таким образом часто осуществляется удаленный доступ, сеть и хранилище;

  • Бэкап и восстановление сложнее, т.к. Hbase не откатывается, сложно сделать Ровно раз. В распределенной среде при сбое программы перезапустить можно только Storm, а данные HBase нельзя откатить в предыдущее состояние. Например, в сценарии рекламного биллинга Storm+Hbase не сработает.Проблема в том, что деньги могут быть переплачены.Решением вышеизложенного является Storm+mysql, который решает проблему консистентности за счет отката mysql. Но архитектура может быть очень сложной. Производительность также будет очень низкой, и вам необходимо выполнить коммит для обеспечения согласованности данных.

  • Для Storm разделение данных о состоянии и динамическое расширение также очень сложно сделать.Серьезная проблема заключается в том, что все пользователи будут повторять эти задачи в Storm, такие как поиск и реклама, что ограничивает развитие бизнеса отдела.

1.3 Богатый доступ к состоянию Flink и эффективный механизм отказоустойчивости

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

два. Управление состоянием во Flink

2.1. По разделению и расширению данных Flink можно условно разделить на две категории:

  • Keyed States

  • Operator States

2.1.1.Keyed States

Использование ключевых состояний

Flink также предоставляет несколько типов структур данных для ключевых состояний.

Динамическое расширение ключевых состояний

2.1.2.Operator State

Использование состояний оператора

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

Оператор указывает различные методы расширения

Динамическое расширение состояний оператора очень гибкое.Теперь предусмотрено три расширения, которые описаны ниже:

  • ListState: при изменении степени параллелизма каждый список в параллелизме будет удален, а затем эти списки будут объединены в новый список, а затем равномерно распределены по новой задаче в соответствии с количеством элементов;

  • UnionListState: по сравнению с ListState, он более гибкий.Метод разделения передается пользователю.При изменении параллелизма исходный список будет склеен вместе. Затем, не разделяя, он напрямую передается пользователю;

  • BroadcastState: например, когда большая таблица и маленькая таблица объединены, маленькая таблица может быть напрямую передана в разделы большой таблицы, и данные для каждого параллелизма полностью согласованы. Обновление тоже самое, при смене параллелизма КОПИРУЙТЕ данные в новую задачу.

Выше приведены три метода расширения, предоставляемые государствами-операторами Flink, и пользователи могут выбирать их в соответствии со своими потребностями.

Повысьте надежность программы с помощью Checkpoint

Пользователь может открыть контрольную точку в соответствии с конфигурацией в программе.После заданного интервала времени фреймворк создаст резервную копию состояния программы в соответствии с интервалом времени. При возникновении сбоя Flink восстановит состояние всех задач вместе до состояния Checkpoint. С чего начать переоформление.

Flink также предоставляет различные гарантии правильности, в том числе:

  • AT LEAST ONCE;

  • Exactly once;

Резервное копирование в виде данных о состоянии программы, сохраненных в State

Flink также предоставляет механизм, который позволяет помещать эти состояния в память. При выполнении Checkpoint Flink завершит восстановление.

Возобновление из рабочего состояния остановленного задания

При обновлении компонента текущее задание необходимо остановить. В это время необходимо возобновить работу с ранее остановленного задания. Flink предоставляет два механизма для возобновления задания:

  • Точка сохранения: это специальная контрольная точка, но в отличие от контрольной точки, которая запускается из системы на регулярной основе, она запускается пользователем с помощью команды, а формат хранения отличается от формата контрольной точки.Данные будут сохранены в стандартном формате, вне зависимости от того, какая конфигурация Flink будет восстанавливаться с этой контрольной точки, что является очень хорошим инструментом для обновления версии;

  • Внешняя контрольная точка: расширение существующей контрольной точки, то есть после завершения внутренней контрольной точки дополнительные данные контрольной точки будут храниться в каталоге, указанном пользователем;

три. Реализация механизма управления состоянием и отказоустойчивости

Ниже описывается реализация механизмов управления состоянием и отказоустойчивости.Flink предоставляет 3 различных StateBackends.

  • MemoryStateBackend

  • FsStateBackend

  • RockDBStateBackend

Пользователи могут выбирать в соответствии со своими потребностями.Если объем данных небольшой, их можно хранить в MemoryStateBackend и FsStateBackend.Если объем данных большой, их можно хранить в RockDB.

Далее представлены HeapKeyedStateBackend и RockDBKeyedStateBackend.

Во-первых, HeapKeyedStateBackend

Во-вторых, RockDBKeyedStateBackend

Процесс выполнения Checkpoint

Поток выполнения Checkpoint реализован по алгоритму Чанди-Лампорта.

Выравнивание барьера контрольно-пропускного пункта

Полный контрольно-пропускной пункт

Когда полный объем Checkpoint резервирует данные на каждом узле, ему нужно только один раз облегчить данные, а затем записать их во внешнее хранилище, что повлияет на производительность резервного копирования. Оптимизирован на этой основе.

Инкрементная контрольная точка для RocksDB

Данные RockDB будут обновляться в памяти, а когда память будет заполнена, они будут записаны на диск. Инкрементальный механизм будет КОПИРОВАТЬ вновь созданные файлы и сохранять их, а ранее созданные файлы не нужно копировать в сохраняемые файлы. Таким образом, объем данных COPY уменьшается, а производительность повышается.

4. Введение работы, связанной с Али

4.1 Путь роста Флинка в Али

Али начал исследовать Flink в 2015 году, запустил проект Blink в октябре 2015 года и улучшил некоторые оптимизации и улучшения Flink в условиях крупномасштабного производства. В 2016 году Double 11 внедрила систему Blink для предоставления услуг поиска, рекомендаций и рекламы. В мае 2017 года Blink стал вычислительной машиной Alibaba в режиме реального времени.

4.2 Работа Али, связанная с управлением состоянием и отказоустойчивостью

Проделанная работа, основанная на некоторых оптимизациях в реконструкции окна на основе состояния, Али также улучшает функции. Последующие действия будут включать улучшение асинхронных функций Checkpoint, а также дальнейшее общение и сотрудничество с сообществом. Помогите сообществу Flink улучшить связанную работу.

Для получения дополнительной информации, пожалуйста, посетитеВеб-сайт китайского сообщества Apache Flink