Сегодня рассмотрим 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
Ближайшая дата курса
6 октября, 2025
Продолжительность
24 ак.часов
Стоимость обучения
72 000
Однако, платформа Apache Kafka и ее компоненты обеспечивает согласованность, гарантируя, что даже stateful-приложение потоковой обработки может восстановиться после сбоя без дубликатов и потери данных. Также гарантируется полнота данных, что означает отсутствие частичных выходных результатов в качестве окончательных итогов, даже при нарушении порядка поступления входного потока записей. Как именно Apache Kafka и ее библиотека Kafka Streams обеспечивает эти 2 ключевые характеристики распределенных систем потоковой обработки, согласованность и полноту данных, мы рассмотрим далее.
Потоковая согласованность как обеспечение уникальных и существующих записей
Рассмотрим типичный кейс Big Data системы потоковой аналитики больших данных, когда запись обрабатывается в конвейере потоковых данных, но непосредственно перед фиксацией происходит сбой процесса. После восстановления системы та же запись будет снова получена и обработана, а состояние обновится дважды, что приведет к несогласованному выводу и соответствует семантика «хотя бы один раз» (at-least-once). Избежать этого, гарантируя согласованность, поможет строго-однократная семантика доставки сообщений (exactly-once), которая обеспечивает успешную фиксацию записи только один раз даже при неудачном завершении процесса. Как это устроено в Apache Kafka, мы говорили в этой статье.
Полнота как гарантия корректного порядка записей
В идеале в потоковой парадигме момент создания записи (время события) совпадает со временем ее получения и обработки. Но на практике это не совсем так из-за искажения системных часов, а также задержек, вызванных сбоями в источниках данных или сетевой передаче. Все это приводит к нарушению порядка записей в потоках данных. Однако полнота гарантирует корректность итоговых результатов, даже если записи в потоке данных поступают не по порядку.
Таким образом, сбой процесса может привести как к нарушению согласованности, так и к изменению порядка записей в потоковых данных. Apache Kafka решает двойную проблему корректности за счет интеграции потоковой обработки с постоянным ведением журнала. Платформа хранит все непрерывные потоки данных в виде реплицированных журналов на запись (только для добавления, append-only). Это упрощает проблему согласованности и полноты потоковой передачи за счет использования упорядоченных добавлений и повторов журналов транзакций.
Администрирование кластера Kafka
Код курса
KAFKA
Ближайшая дата курса
15 сентября, 2025
Продолжительность
24 ак.часов
Стоимость обучения
72 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
Ближайшая дата курса
8 сентября, 2025
Продолжительность
24 ак.часов
Стоимость обучения
72 000
Узнайте больше про платформу потоковой обработки событий Apache Kafka и ее библиотеку Streams для разработки распределенных приложений на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники