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

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

Что такое Kafka?

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

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

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

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

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

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

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

Термины

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

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