Открыть сервис

Kafka

Apache Kafka — это распределённая платформа для потоковой обработки данных с открытым исходным кодом, разработанная компанией LinkedIn и впоследствии переданная фонду Apache Software Foundation. Kafka предназначена для построения высоконагруженных конвейеров данных в реальном времени, обеспечивая надёжное хранение, передачу и обработку потоков сообщений между различными системами.

История

Проект Kafka был создан в 2010 году в LinkedIn инженерами Джеем Крепсом, Нилом Шахом и Джуном Рао. Основной целью было создание системы, способной обрабатывать огромные объёмы данных, генерируемых социальной сетью, с низкой задержкой и высокой пропускной способностью. В 2011 году проект был открыт под лицензией Apache 2.0. В 2012 году Kafka стала проектом верхнего уровня Apache Software Foundation. С тех пор платформа получила широкое распространение в индустрии, став де-факто стандартом для построения систем обработки событий и микросервисной архитектуры.

Архитектура

Архитектура Kafka основана на модели «издатель-подписчик» (pub/sub) и включает несколько ключевых компонентов:

Брокеры (Brokers)

Брокеры — это серверы, образующие кластер Kafka. Каждый брокер хранит часть данных и обрабатывает запросы от клиентов (производителей и потребителей). Кластер может состоять из одного или нескольких брокеров, что обеспечивает горизонтальное масштабирование и отказоустойчивость.

Топики (Topics)

Топик — это логическая категория или канал, в который публикуются сообщения. Каждое сообщение в топике имеет ключ, значение и временную метку. Топики могут быть разбиты на разделы (partitions), что позволяет параллельно обрабатывать данные.

Разделы (Partitions)

Раздел — это упорядоченная, неизменяемая последовательность сообщений, которая хранится на диске брокера. Каждое сообщение в разделе имеет уникальный идентификатор — смещение (offset). Разделы обеспечивают параллелизм: разные потребители могут читать данные из разных разделов одного топика одновременно.

Производители (Producers)

Производители — это клиенты, которые публикуют сообщения в топики. Они могут указывать ключ сообщения, который определяет, в какой раздел будет записано сообщение. Производители могут настраивать уровень подтверждения записи (acks) для обеспечения надёжности.

Потребители (Consumers)

Потребители — это клиенты, которые читают сообщения из топиков. Они объединяются в группы потребителей (consumer groups). Каждое сообщение в топике доставляется только одному потребителю из группы, что позволяет распределять нагрузку. Если несколько групп подписаны на один топик, каждая группа получает все сообщения независимо.

ZooKeeper и KRaft

Исторически Kafka использовала Apache ZooKeeper для управления кластером: выбора лидера, хранения метаданных и обнаружения сбоев. Начиная с версии 2.8, Kafka внедряет собственный механизм управления — KRaft (Kafka Raft), который постепенно заменяет ZooKeeper, упрощая развёртывание и эксплуатацию.

Принципы работы

Kafka обеспечивает высокую пропускную способность за счёт нескольких архитектурных решений:

Классификация и характеристики

Типы гарантий доставки

Kafka предлагает несколько уровней гарантий доставки сообщений:

Хранение данных

Сообщения в Kafka хранятся на диске в течение заданного времени (по умолчанию 7 дней) или до достижения определённого объёма. После истечения срока хранения они удаляются. Это позволяет потребителям читать данные не только в реальном времени, но и «из прошлого» (replay).

Производительность

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

Применение

Kafka используется в широком спектре задач:

Потоковая обработка данных

Kafka часто служит центральной шиной данных (event bus) для систем потоковой обработки, таких как Apache Flink, Apache Spark Streaming, Apache Storm и Kafka Streams (встроенная библиотека потоковой обработки).

Логирование и мониторинг

Kafka заменяет традиционные системы логирования, позволяя агрегировать логи от множества сервисов и приложений в реальном времени. Примеры: сбор метрик, трейсинг запросов, анализ ошибок.

Микросервисная архитектура

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

Аналитика в реальном времени

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

Интеграция данных

Kafka выступает в роли коннектора между различными базами данных, хранилищами и системами. Например, с помощью Kafka Connect можно синхронизировать данные между PostgreSQL, Elasticsearch и HDFS.

Примеры использования

Критика и ограничения

Несмотря на широкую популярность, Kafka имеет ряд недостатков:

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →