Kafka

Kafka – это распределенная платформа для обработки и передачи потоковых данных. Она обеспечивает высокую пропускную способность и надежность для передачи сообщений между различными приложениями.

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

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

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

Kafka хранит сообщения, которые поступают от других процессов, называемых «производителями» (producers), в формате «ключ — значение». Данные могут быть разбиты на разделы (англ. partitions) в рамках разных тем (topics). Внутри раздела сообщения строго упорядочены по своим смещениям (offset), то есть по положению сообщения внутри раздела, а также индексируются и сохраняются вместе с временем создания. Другие процессы, называемые «потребителями» (consumers), могут считывать сообщения из разделов. Для потоковой обработки Kafka предлагает Streams API, позволяющий разрабатывать Java-приложения, которые получают из Kafka и записывают данные в Kafka. Система также работает с внешними системами обработки потоков, такими как Apache Apex, Apache Beam, Apache Flink, Apache Spark, Apache Storm и Apache NiFi.

Система работает в кластере из одного или нескольких узлов-брокеров, где разделы всех тем распределены по узлам кластера. Для обеспечения отказоустойчивости разделы реплицируются на несколько брокеров. Начиная с версии 0.11.0.0 система позволяет использовать транзакционную модель, близкую к используемым моделям в базах данных, которая обеспечивает обработку потока ровно один раз с использованием Streams API.

Kafka поддерживает два типа тем: обычные и компактные. Обычные темы можно настроить с указанием срока хранения или ограничения по максимальному занимаемому пространству. Система удаляет самые старые записи, если лимит занимаемого пространства превышен. Записи, срок хранения которых истёк, подлежат удалению вне зависимости от лимитов памяти. Значения в компактных темах не содержат срока хранения и не зависят ограничений памяти, вместо этого Kafka хранит и обрабатывает только самые новые значения для каждого ключа и гарантирует, что никогда не удалит последнее сообщение для каждого ключа. Пользователи могут самостоятельно удалять сообщения, написав сообщение с пустым значением для удаления значения по ключу.

В Kafka есть пять основных API-интерфейсов:

  • Producer API — для отправки сообщений в брокер;
  • Consumer API — подписка на темы и получение сообщений из брокера;
  • Connector API — подключение к системе и многократное использование Producer API и Consumer API;
  • Streams API — преобразование входных потоков данных в выходные;
  • Admin API — управление темами, брокерами и другими объектами.

Producer API и Consumer API имеют слабую связность, обеспечивая взаимодействие с ядром системы посредством обмена сообщениями; благодаря этому реализации этих API возможна на любом языке программирования без потери эффективности в сравнении с официальным Java API.

AMQP (Advanced Message Queuing Protocol) и Kafka – это две различные технологии для обмена сообщениями в распределенных системах.
AMQP – это протокол обмена сообщениями, который обеспечивает надежную доставку сообщений между различными приложениями и сервисами. Он основан на модели сообщений и очередей, где отправители передают сообщения в очередь, а получатели забирают их оттуда, обеспечивая надежность и независимость от времени. AMQP обычно используется в корпоративных системах для обмена сообщениями между различными компонентами.
Kafka, с другой стороны, это распределенная система для потоковой обработки данных, которая обеспечивает высокую пропускную способность и надежную доставку сообщений. Он основан на концепции журнала изменений (log-based), где сообщения записываются в лог и удерживаются на протяжении определенного периода времени. Клиенты могут читать сообщения из лога и обрабатывать их согласно своим потребностям. Kafka обычно используется для обработки больших объемов данных и стриминговой обработки.
Таким образом, AMQP подходит для обмена сообщениями между приложениями, в то время как Kafka больше подходит для обработки данных в реальном времени и потоковой обработки. Выбор между этими двумя технологиями зависит от конкретных требований вашего проекта и того, какие задачи вы планируете решать с их помощью.

Обсуждение закрыто.