Зачем Ververica Cloud заменила RocksDB на GeminiStateBackend для stateful-приложений Apache Flink

Apache Flink примеры курсы обучение, разработка Flink -приложений, Flink для инженеров данных и разработчиков, Школа Больших Данных Учебный Центр Коммерсант

Что такое Ververica Runtime Assembly, чем GeminiStateBackend лучше RocksDB и еще несколько отличий коммерческого облачного решения от открытого Apache Flink.

Что такое Ververica Cloud и при чем здесь Apache Flink

Технологии с открытым исходным кодом развиваются намного быстрее при поддержке крупных корпораций. Например, компания Confluent продвигает Apache Kafka, Astronomer – развивает Apache AirFlow, а немецкая фирма Ververica создала высокопроизводительный облачный сервис для обработки данных в реальном времени на базе Apache Flink. Этот полностью управляемый облачный сервис позволяет легко запускать приложения Apache Flink, которые работают в разы быстрее благодаря некоторым legacy-решениям. Одним из них является Ververica Runtime Assembly (VERA) – среда выполнения Flink, оптимизированная по производительности, которая имеет оптимизированный SQL-движок и заменяет NoSQL-СУБД RocksDB на GeminiStateBackendспециальный бэкэнд корпоративного уровня для хранения состояний stateful-приложений. На уровне приложения VERA полностью совместима с существующими приложениями Flink. Однако, эта реализация дает значительные преимущества по сравнению с ванильным Flink, повышая скорость распределенных вычислений над большими данными почти в 2 раза. Какими тестами это подтверждено, рассмотрим чуть позже, а пока разберемся, за счет чего достигается такая скорость.

Вообще разработка потоковых stateful-приложений довольно сложна по следующим причинам:

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

Чтобы смягчить эти проблемы, разработчики Ververica Cloud предложили заменить хранилище состояний на основе key-value базы данных RocksDB механизмом GeminiStateBackend. Этот механизм хранения значений ключа предназначен для оптимизации производительности потоковой обработки данных. Поскольку в задачах потоковой обработки разные операторы имеют различные режимы доступа к состоянию, то для реализации оптимальной производительности хранилища состояний нужны различные комбинации параметров. Чтобы настроить их вручную, разработчику необходимо очень глубокое знание Apache Flink.

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

Многопоточные соединения часто становятся причиной узких мест в хранилище состояний. Разделение ключей и значений может значительно повысить производительность, повышая эффективность утилизации вычислительных ресурсов в среднем на 50%.

Адаптивная настройка параметров устанавливает параметры на основе текущего режима доступа к данным и трафика во время выполнения задания, оптимизируя производительность хранилища состояний для текущего сценария. Обычно он может автоматизировать до 95% настройки параметров, обеспечивая повышение пропускной способности одного ядра на 10–40%.

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

Архитектура GeminiStateBackend  на основе дерева слияний с журнальной структурой (LSM, Log Structured Merge), о котором мы писали здесь, обеспечивает три основные возможности:

  • адаптация к изменениям объема данных и характеристик доступа;
  • многоуровневое хранение «горячих» и «холодных» данных;
  • переключение между возможностью кэширования и ее отключением.

Помимо адаптивной настройки параметров для оптимального развертывания, GeminiStateBackend  поддерживает хеш-хранилище для быстрого произвольного доступа, разделение вычислений и хранилища для устранения зависимости локального диска для данных о состоянии, разделение ключей и значений для повышения производительности многопоточных запросов с оператором JOIN.

GeminiStateBackend в качестве бэкенда состояний для stateful-приложений Apache Flink широко используется в Alibaba Group и Alibaba Cloud. Например, 11 ноября, во всемирный день шопинга, когда маркетплейс AliExpress проводит самую большую распродажу, эта технология позволила сократить ручную настройку параметров Flink-приложения более чем на 95% и увеличить пропускную способность каждого ядра на 10–40%. Какими тестами это проверялось, рассмотрим далее.

Бенчмаркинговое сравнение Gemini vs RocksDB

Сравнение GeminiStateBackend с RocksDB поводилось на наборе тестов Nexmark для запросов к непрерывным потокам данных. Общее количество событий источника составляет 100 миллионов. Источник генерирует 10 миллионов записей в секунду. В качестве примера используется онлайн-аукцион, где 92% данных – это ставки, 6% данных – предмет продажи и 2% данных относится к людям, участвующим в торгах. Тестирование проводилось в кластере Flink из 3-х узлов, каждый из которых имеет 8 ядер и 32 ГБ оперативной памяти, а также локальный SSD-диск емкостью 800 ГБ.

Платформа тестирования производительности Nexmark выполняет запросы Flink в автономном кластере из одного главного узла и одного или нескольких рабочих узлов. Все они работают на основе Linux, скрипт монитора ЦП должен работать в Linux. На каждом узле установлено JDK 1.8.x или выше, т.к. скрипты Nexmark используют некоторые инструменты JDK, и запущен sshd, чтобы использовать сценарии Flink и Nexmark, которые управляют удаленными компонентами.

Для оценки производительности в Nexmark используются два показателя измерения производительности:

  • ядра — загрузка ЦП, используемая системой потоковой обработки. Обычно ЦП допускает вытеснение, а не ограничение памяти. Поэтому способ, которым система обработки потоков использует ресурсы ЦП, и какую пропускную способность обеспечивает одно ядро, очень важны. Для тестирования запускался сборщик использования ЦП на каждом рабочем узле. JVM-метрика JVM.CPU.Load, предоставленную Flink дает не очень точные значения, поэтому она не использовалась.
  • время — стоимость времени для указанного количества событий, выполняемых системой обработки потока.

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

Результаты сравнения GeminiStateBackend с RocksDB показаны в следующей таблице:

Сценарий Gemini TPS/Core RocksDB TPS/Core Улучшение на
Выбор среднего значения выигрышных цен ставок для всех аукционов в каждой категории 83.63 K/s 53.26 K/s 57.02%
На каких аукционах было сделано больше всего ставок за последний период? 84.52 K/s 57.86 K/s 46.08%
Выбор людей, которые заходили в систему и создавали аукционы за последний период 468.96 K/s 361.37 K/s 29.77%
Поиск выигрышной ставки для каждого аукциона 59.42 K/s 26.56 K/s 123.72%
Сколько ставок сделал пользователь за каждый активный сеанс? 93.08 K/s 48.82 K/s 90.66%
Какова последняя ставка участника торгов на аукционе (запрос дедупликации) 150.93 K/s 87.37 K/s 72.75%
Какова максимальная цена 10 ставок на аукционе (запрос TOP-N) 143.46 K/s 58.5 K/s 145.23%
Получайте ставки с соответствующей информацией об аукционе, где категория равна 10 (соединение фильтров) 75.69 K/s 22.44 K/s 237.30%

 В заключение отметим, что помимо GeminiStateBackend вместо RocksDB, Ververica Cloud в отличие от фреймворка Apache Flink, представляет собой полноценный облачный сервис, который позволяет разрабатывать приложения потоковой обработки больших данных с использованием стандартного SQL, JAVA или Python, а также разворачивать их, масштабируя по требованию. Сервис имеет бесплатный тариф, которого вполне достаточно для создания и развертывания небольших потоковых приложений. Как это сделать, я расскажу в другой раз.

Узнайте больше про использование Apache Flink для потоковой обработки событий в распределенных приложениях аналитики больших данных и машинного обучения на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://docs.ververica.com/vvc/about-ververica-cloud/vera/
  2. https://www.alibabacloud.com/help/en/flink/user-guide/geministatebackend
  3. https://github.com/nexmark/nexmark

Добавить комментарий

Поиск по сайту