
Что такое Kafka?
Kafka — это распределенное, отказоустойчивое, горизонтально масштабируемое хранилище, основной структурой данных в котором является append-only лог. Оно поддерживает потоковую обработку данных и имеет набор коннекторов для интеграции с базами данных и другими хранилищами.
Для простоты можно представлять кафку как распределенное key-value хранилище или распределенный commit log: она позволяет публиковать потоки данных (сообщения, метрики), а с другой стороны — подписываться на них.
В силу своей архитектуры может быть и базой данных, и системой очередей, и платформой для потоковой обработки данных и т. д.
Кафка умеет справляться с любыми объемами данных, отлично масштабируется горизонтально, хранит все данные на диске, обладает высокой отказоустойчивостью и доступностью.
Серверы LinkedIn обслуживают 7 трлн событий в день.
Почему стоит использовать
- Горизонтальное масштабирование.
- Может работать с большим количеством продюсеров вне зависимости от топиков.
- Несколько консюмеров могут читать один поток сообщений, не мешая друг другу.
- Гарантия, что сообщение будет обработано ровно один раз.
- Все сообщения хранятся на диске, возможно перечитать данные из прошлого.
- Kafka Connect — позволяет связывать любые источники данных с кафкой.
- Kafka Streams — практически real-time обработка сообщений.
Термины
- Распределенное хранилище — это система, которая, как правило, работает на нескольких машинах, каждая из которых в свою очередь является кусочком хранилища. Для пользователя это все представляется в виде единого целого. Из плюсов — хорошая горизонтальная масштабируемость и отказоустойчивость.
- Горизонтальное масштабирование — техника, в которой мы вместо увеличения мощностей одной машины добавляем в систему дополнительные машины и тем самым увеличиваем доступные ресурсы.
- Вертикальное масштабирование — увеличение производительности каждого компонента системы с целью повышения общей производительности. Добавление памяти, RAM и т. д. Минусы — явный предел и необходимость даунтайма.
- Комбинированное масштабирование — можно комбинировать оба подхода, но не все системы поддерживают горизонтальный.
- Отказоустойчивость — это свойство системы, позволяющее ей не иметь единой точки отказа. То есть если что-то пошло не так и какая-то из машин вышла из строя, система может продолжить работу.
- Лог — это упорядоченная по времени append-only структура данных.
- Потоковая обработка данных — достигается при помощи нативного Kafka Streams или внешних фреймворков. Основное отличие от обработки батчами — скорость: данные обрабатываются сразу, как только попадают в кафку, а не раз в час/сутки при запуске специальной джобы. Данный подход значительно снижает задержки при обработке данных и позволяет использовать кафку как real-time систему.