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