Kafka —
программный брокер сообщений, то есть приложение, которое принимает данные от другой программы, хранит их в своей базе и отдает информацию другой программе. Kafka была разработана в LinkedIn, после исходный код был передан в Apache Software Foundation.
Область применения кафки сфокусирована в отраслях, где требуются сбор, обработка, безопасное хранение и передача больших объемов данных, например:
- Онлайн-игры.
- Социальные сети.
- Банковские системы.
- Системы геопозиционирования.
- Анализ данных (большие объемы).
- Системы с множеством датчиков, сенсоров, контроллеров и других конечных устройств (например, интернет вещей).
Архитектурно в процессе работы Kafka Apache участвуют следующие сущности:
- Продюсер (producer) — то, что генерирует и посылает данные брокеру;
- Потребитель (consumer) — тот, кто принимает отправленные продюсером сообщения;
- Сообщение — данные, необходимый для совершения какой-либо операции (например, авторизации, оформления покупки или подписки);
- Брокер — узел для передачи данных от продюсера к потребителю;
- Топик (тема) — хранилище сгруппированных сообщений (по разным признакам), из которого потребитель извлекает необходимую ему информацию.
Преимущества:
- Возможность долгого хранения данных.
- Бесплатность и открытый исходный код.
- Алгоритмы работы заточены на высокую производительность.
- Механизмы защиты данных для обеспечения большей безопасности.
- Возможность установки и настройки в режиме кластера для отказоустойчивости.
- Простая масштабируемость за счет добавления узлов (горизонтальная масштабируемость).
Популярный аналог кафки — RabbitMQ. В целом, оба программных продукта позволяют реализовать очереди запросов. Но есть несколько нюансов:
- Способы доставки сообщений: Kafka использует pull (получатель сам достает сообщение), а RabbitMQ — push (брокер сам отправляет сообщение).
- Kafka хранит данные, пока не достигнет установленного администратором предела. RabbitMQ удаляет сообщение после отправки его получателю.
- При высоких нагрузках RabbitMQ обладает меньшей производительностью из-за реализованного гибкого управления.
Еще немного о Kafka на Википедии.