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

Давайте посмотрим, что такое Apache Kafka, как он работает и кому пригодится.

Нервная система бэкенда: зачем нужен Apache Kafka

Современные серверные приложения сложны, многоярусны и включают множество компонентов и сервисов. Архитекторы программного обеспечения выделяют в отдельные модули все, что можно: рассылку SMS, системы сбора статистики, подсистемы авторизации.

Зачем? Во-первых, можно разбить огромные тяжелые задачи на маленькие кусочки и решать частями. Во-вторых, это позволяет распределить нагрузку и добавить отказоустойчивости.

Но таким распределенным системам нужно как-то передавать данные между собой. В этом месте на сцене появляются системы обмена сообщениями (брокеры сообщений, диспетчеры сообщений). Это некая разветвленная система труб, в которую с одного конца можно бросить, например, контейнер с сообщениями, а с другого конца его кто-то получит и прочитает. К таким системам относят и Apache Kafka.

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

Например, у вас выстроена система сообщений для большого интернет-магазина. После регистрации нового пользователя сервис авторизации разошлет сообщение об этом событии. Сервис е-мейлов в ответ пошлет приветственное письмо, а сервис сбора статистики обновит графики в админке для менеджеров магазина.

Почему установка Apache Kafka — лучший выбор

Как и любая дополнительная система, механизм обмена сообщениями добавляет сложности и создает ряд дополнительных проблем в обслуживании вашего приложения:

  1. Шина пересылки данных — узкое место. Представим, что ваши сервисы работают не на максимум, но в шине закончился ресурс для пересылки сообщений. В этом случае вся система будет парализована нагрузкой, несмотря на то, что у каждого компонента в отдельности остается достаточно мощности для обработки запросов.
  2. Потеря данных в шине может запутать и нарушить состояние системы. И хорошо, если вы потеряете в сообщениях что-то малозначительное, вроде статистических данных. Но что, если что-то пойдет не так при пересылке финансовой операции или важного заказа?

Для устранения этих проблем и был создан Apache Kafka — сверхнадежная сверхмасштабируемая сверхгибкая система обмена сообщениями внутри бэкенд-приложений.

Описание Apache Kafka

Брокер сообщений Kafka — распределенная система. Его серверы объединяются в кластеры. Хранение и пересылка сообщений идет параллельно на разных серверах, а это дает большую надежность и отказоустойчивость. Даже при выходе из строя нескольких машин, сообщения все еще будут пересылаться и обрабатываться.

Также сервис легко масштабируется горизонтально. То есть, для наращивания мощности Apache Kafka достаточно вводить в строй дополнительные серверы. Это самый простой в реализации способ масштабирования систем, но подходит он не для всех. Например, с базами данных такой подход не работает — непонятно, что делать с записями в таблицах на новых серверах. Kafka же изначально заточен под взрывной рост производительности.

Еще один плюс — консистентность данных. Записи в Apache Kafka хранятся в виде журнала коммитов. Это выглядит как очередь сообщений, в которую можно добавлять записи, а вот удалять или модицифировать — нет. Такой подход дает огромную надежность и простоту изменения любых состояний — всегда понятно, что, как и в какой последовательности менялось.

Перечисленные пункты — это, разумеется, далеко не все, чем хорош Apache Kafka. Есть еще хранение сообщений на диске, репликация, роутинг данных по куче параметров и десятки других полезных примочек.

Apache Kafka: обзор возможностей

Итак, у нас есть крутая, масштабируемая, производительная и гибкая система передачи сообщений. И вот как мы можем ее использовать:

  1. Самый очевидный подход — для связи микросервисов между собой. Сделал действие, послал сообщение другим сервисам — все, молодец. Или подписался на обновления от других частей системы и потихоньку на них реагируешь.
  2. Организация потоков данных. Допустим, у вас идет постоянный стрим каких-то событий, их нужно передавать по цепочке и на каждом этапе что-то с ними делать. Apache Kafka идеально реализует этот сценарий с помощью грамотной организации роутинга сообщений.
  3. Агрегация записей. В Apache Kafka можно писать данные куда быстрее, чем в обычную базу данных. Это значит, что с помощью сообщений можно организовать сбор кучи метрик, считать от них, например, средние, и уже эти значения писать в БД.
  4. Сбор логов. Apache Kafka дает возможность хранить сообщения в течение определенного времени. Это значит, что сообщения можно использовать для кратковременного (часы/сутки) хранения логов. Это позволяет разгрузить БД и медленные системы логирования.

Что такое Apache Kafka: делаем выводы

Kafka — решение не для новичков и не для маленьких систем. Далеко не каждый проект дорастает до нагрузок, при которых этот сервис становится реально нужен. Но знание основных приемов использования Apache Kafka позволит уже сейчас заложить в архитектуру вашего бэкенда необходимые структуры, которые при необходимости правильно масштабируются под рост бизнеса.