Руководство по Kafka. Введение.

Оглавление

Руководство по Kafka. Введение.

Что такое Kafka?

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

Для простоты можно представлять кафку как распределенное key-value хранилище или распределенный commit log: она позволяет публиковать потоки данных (сообщения, метрики), а с другой стороны — подписываться на них.

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

Кафка умеет справляться с любыми объемами данных, отлично масштабируется горизонтально, хранит все данные на диске, обладает высокой отказоустойчивостью и доступностью.

Серверы LinkedIn обслуживают 7 трлн событий в день.

Почему стоит использовать

  1. Горизонтальное масштабирование.
  2. Может работать с большим количеством продюсеров вне зависимости от топиков.
  3. Несколько консюмеров могут читать один поток сообщений, не мешая друг другу.
  4. Гарантия, что сообщение будет обработано ровно один раз.
  5. Все сообщения хранятся на диске, возможно перечитать данные из прошлого.
  6. Kafka Connect — позволяет связывать любые источники данных с кафкой.
  7. Kafka Streams — практически real-time обработка сообщений.

Термины

  • Распределенное хранилище — это система, которая, как правило, работает на нескольких машинах, каждая из которых в свою очередь является кусочком хранилища. Для пользователя это все представляется в виде единого целого. Из плюсов — хорошая горизонтальная масштабируемость и отказоустойчивость.
  • Горизонтальное масштабирование — техника, в которой мы вместо увеличения мощностей одной машины добавляем в систему дополнительные машины и тем самым увеличиваем доступные ресурсы.
  • Вертикальное масштабирование — увеличение производительности каждого компонента системы с целью повышения общей производительности. Добавление памяти, RAM и т. д. Минусы — явный предел и необходимость даунтайма.
  • Комбинированное масштабирование — можно комбинировать оба подхода, но не все системы поддерживают горизонтальный.
  • Отказоустойчивость — это свойство системы, позволяющее ей не иметь единой точки отказа. То есть если что-то пошло не так и какая-то из машин вышла из строя, система может продолжить работу.
  • Лог — это упорядоченная по времени append-only структура данных.
  • Потоковая обработка данных — достигается при помощи нативного Kafka Streams или внешних фреймворков. Основное отличие от обработки батчами — скорость: данные обрабатываются сразу, как только попадают в кафку, а не раз в час/сутки при запуске специальной джобы. Данный подход значительно снижает задержки при обработке данных и позволяет использовать кафку как real-time систему.

Полезные ссылки

Обсудить статью, задать вопрос или предложить тему — напишите мне в Telegram