Согласованность и полнота распределенной обработки потоков в Apache Kafka Streams

курсы Apache Kafka Streams, RocksDB, обучение разработчиков курсы Apache Kafka Streams, курсы по Kafka, обучение Kafka, разработка потоковых приложений Kafka, обучение разработчиков Big Data, Школа Больших ДАнных Учебный центр Коммерсант

Сегодня рассмотрим 2 важных понятия архитектуры распределенных систем для хранения и аналитики больших данных на примере платформы потоковой обработки событий Apache Kafka.Читайте далее, что такое согласованность и полнота, а также в чем преимущества строго однократной доставки сообщений на основе транзакционной записи и фиксации смещений в журналах, и как все это поддерживается библиотекой разработки stateful-приложений Apache Kafka Streams.

Почему согласованность и полнота так важны для потоковой обработки Big Data

В настоящее время потоковая обработка стала новой парадигмой программирования в мире Big Data, которая позволяет анализировать данные асинхронно, производя сложные в реальном времени. Поскольку такие задачи решаются распределенными системами, для них остается актуальной проблема CAP-теоремы, которую каждый движок потоковой обработки решает по-своему. Напомним, CAP-теорема для распределенных систем гласит, что из 3 возможных состояний (Consistency – Согласованность, Availability – Доступность и Partition tolerance – Устойчивость к разделению) одновременно возможны лишь 2. В свою очередь, именно согласованность является одним из 4-х ключевых свойств ACID (Atomicity – атомарность, Consistency – согласованность, Isolation – изолированность, Durability – долговечность), характерных для транзакций. Подробнее об этом мы писали здесь.

Архитектура Данных

Код курса
ARMG
Ближайшая дата курса
31 октября, 2022
Длительность обучения
24 ак.часов
Стоимость обучения
60 000 руб.

Однако, платформа Apache Kafka и ее компоненты обеспечивает согласованность, гарантируя, что даже stateful-приложение потоковой обработки может восстановиться после сбоя без дубликатов и потери данных. Также гарантируется полнота данных, что означает отсутствие частичных выходных результатов в качестве окончательных итогов, даже при нарушении порядка поступления входного потока записей. Как именно Apache Kafka и ее библиотека Kafka Streams обеспечивает эти 2 ключевые характеристики распределенных систем потоковой обработки, согласованность и полноту данных, мы рассмотрим далее.

Потоковая согласованность как обеспечение уникальных и существующих записей

Рассмотрим типичный кейс Big Data системы потоковой аналитики больших данных, когда запись обрабатывается в конвейере потоковых данных, но непосредственно перед фиксацией происходит сбой процесса. После восстановления системы та же запись будет снова получена и обработана, а состояние обновится дважды, что приведет к несогласованному выводу и соответствует семантика «хотя бы один раз» (at-least-once). Избежать этого, гарантируя согласованность, поможет строго-однократная семантика доставки сообщений (exactly-once), которая обеспечивает успешную фиксацию записи только один раз даже при неудачном завершении процесса. Как это устроено в Apache Kafka, мы говорили в этой статье.

Полнота как гарантия корректного порядка записей

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

Таким образом, сбой процесса может привести как к нарушению согласованности, так и к изменению порядка записей в потоковых данных. Apache Kafka решает двойную проблему корректности за счет интеграции потоковой обработки с постоянным ведением журнала. Платформа хранит все непрерывные потоки данных в виде реплицированных журналов на запись (только для добавления, append-only). Это упрощает проблему согласованности и полноты потоковой передачи за счет использования упорядоченных добавлений и повторов журналов транзакций.

Администрирование кластера Kafka

Код курса
KAFKA
Ближайшая дата курса
23 ноября, 2022
Длительность обучения
24 ак.часов
Стоимость обучения
60 000 руб.

Согласованность и полнота потоковых данных в Apache Kafka Streams

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

  • идемпотентная и транзакционная запись для согласованности;
  • спекулятивная обработка с пересмотром для полноты.

В частности, циклы процесса чтение-запись в Kafka Streams транслируются по мере того, как запись добавляется к набору журналов Kafka, а протокол двухфазной фиксации используется для включения идемпотентных и транзакционных добавлений, чтобы обеспечить семантику exactly-once.

Для обеспечения полноты применяется отдельный спекулятивный подход с механизмами, основанными на пересмотрах с подмножеством операторов, чувствительных к упорядочению данных. Этот подход на основе журналов предупреждает задержки внутрипроцессорной координации, позволяя разделить фундаментальные решения для ускорения обработки, повышения пропускной способностью и обеспечения правильного порядка записей [1]. Читайте в нашей новой статье, как с помощью Apache Kafka можно реализовать архитектурный шаблон с разделением ответственности CQRS.

В заключение отметим, что Kafka Streams позволяет создавать распределенные stateful-приложения потоковой обработки данных, хранящихся в топиках Apache Kafka, используя встроенную базу данных RocksDB в качестве надежного хранилища состояний. В свою очередь, это высокопроизводительное key-value NoSQL-хранилище использует файловый кэш на уровне раздела, предоставляя локальный доступ к потокам без задержки в сети [2, 3]. О том, что такое RocksDB, как устроена эта NoSQL-СУБД и при чем здесь Apache Kafka Streams, читайте в этом материале.

Apache Kafka для инженеров данных

Код курса
DEVKI
Ближайшая дата курса
17 октября, 2022
Длительность обучения
32 ак.часов
Стоимость обучения
80 000 руб.

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

Источники

  1. https://www.confluent.io/blog/rethinking-distributed-stream-processing-in-kafka/
  2. https://medium.com/blackrock-engineering/delivering-eventual-consistency-with-kafka-streams-c013a217b9b9
  3. https://www.confluent.io/blog/how-to-tune-rocksdb-kafka-streams-state-stores-performance/

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