Заменит ли Apache Kafka в прочие СУБД в мире Big Data: за и против

Автор Категория ,
Заменит ли Apache Kafka в прочие СУБД в мире Big Data: за и против

В этой статье мы поговорим про возможность нехарактерного использования Apache Kafka: не как распределенной стримминговой платформы или брокера сообщений, а в виде базы данных. Читайте далее, как Apache Kafka дополняет другие СУБД, не заменяя их полностью, почему такой вариант использования возможен в Big Data и когда он не совсем корректен.

Что общего у Apache Kafka с базой данных и чем они отличаются

В современном ИТ-мире есть множество видов баз данных, которые в большинстве случаев принято разделять на следующие категории [1]:

  • простейшие – файлы, иерархические и сетевые;
  • реляционные (MySQL, MariaDB, PostgreSQL, ClickHouse);
  • нереляционные или NoSQL (Elasticsearch, Cassandra, Apache HBase, MongoDB, Redis, Prometheus, InfluxDB, TimescaleDB, Tarantool);
  • комбинированные NewSQL (MemSQL, VoltDB, Spanner, Calvin, CockroachDB, FaunaDB, yugabyteDB) и многомодельные (ArangoDB, OrientDB, Couchbase).

Независимо от того, к какой категории относится та или иная СУБД, она предназначена для систематизированного хранения данных, которые могут быть найдены и обработаны компьютеризированным способом [2]. Под это определение попадает масса систем, включая Data Lake на Apache Hadoop, Delta Lake на Spark, а также Kafka, которая является не просто инструментом обмена сообщениями по принципу «издатель-подписчик», а отказоустойчивой распределенной платформой потоковой передачи событий.

При этом, подобно СУБД с поддержкой классических ACID-транзакций, Apache Kafka обеспечивает атомарность, согласованность, изолированность и долговечность хранимых данных [3] за счет механизмов гарантии доставки сообщений, репликации, средств конфигурирования топиков и настроек параметров очистки журналов. Также Кафка предоставляет возможности избирательного доступа к данными с помощью KSQL – SQL-движка на базе API Kafka Streams.  Кроме того, сама эта клиентская библиотека для разработки приложений и микросервисов, в которых входные и выходные данные хранятся в кластерах Кафка, также включает множество функций обработки потоковых данных в режиме онлайн.

Тем не менее, не стоит считать Apache Kafka одной из множества СУБД по следующим причинам [4]:

  • несмотря на наличие KSQL и API Kafka Streams, «настоящие СУБД» типа Elasticsearch, ClickHouse и пр., обладают гораздо более мощным инструментарием в части поиска и обработки информации с помощью запросов;
  • при том, что Кафка может хранить данные вечно, надежно и с высокой доступностью, обеспечивая гарантии ACID-транзакций, она не заменяет, а дополняет другие хранилища данных (СУБД, DWH, Data Lake или Delta Lake), выступая в качестве платформы потоковой передачи событий для обмена сообщениями, хранения, обработки и интеграции в масштабе в реальном времени с нулевым временем простоя и нулевой потерей данных.
Apache Kafka, интеграция систем, Big Data
Интеграция информационных систем и хранилищ данных через Apache Kafka

Такие разные, но вместе: базы данных и стриминговая платформа в мире Big Data

Таким образом, Apache Kafka можно рассматривать не столько как базу данных, сколько как журнал фиксации, интеграционный центр для множества внешних СУБД и хранилищ, которые представляют собой производные индексы или представления. При этом запросы обслуживаются из индексов, которые были созданы для соответствующего шаблона доступа. Это отлично демонстрирует принцип выполнения интерактивных запросов в API Kafka Streams. Обработка в приложениях Kafka Streams – это просто еще один потребитель Кафка, который может поддерживать вычисленное состояние, материализуя его вне потока. Это состояние можно запросить напрямую или передать во внешние системы. Это не включает запросы к Кафка напрямую, а скорее позволяет приложениям потоковой обработки сохранять производное материализованное представление данных в Кафка и выполнять запросы к ним с малой задержкой времени. Кластер Kafka хранит журнал, а API Kafka Streams хранит материализованное представление и обрабатывает запросы к нему. Это можно рассмотреть как своего рода разделительная линия между приложением и базой данных. Аналогично с KSQL-движком, который позволяет не писать сложный код на Java, а предоставляет SQL-операторы для непрерывного преобразования и вычисления материализованных представлений из Kafka и выполнения запросов к ним [5]. Подробнее о том, что такое материализованное представление мы рассказывали здесь на примере интеграции Кафка c СУБД ClickHouse. В следующей статье мы продолжим разговор про Apache Kafka и рассмотрим кейс The New York Times.

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

 

Источники

  1. https://proglib.io/p/11-tipov-sovremennyh-baz-dannyh-kratkie-opisaniya-shemy-i-primery-bd-2020-01-07
  2. https://ru.wikipedia.org/wiki/База_данных
  3. https://ru.wikipedia.org/wiki/ACID
  4. https://www.kai-waehner.de/blog/2020/03/12/can-apache-kafka-replace-database-acid-storage-transactions-sql-nosql-data-lake/
  5. https://www.confluent.io/blog/okay-store-data-apache-kafka/