Apache Kafka: Быстрый обзор за 5 минут

Современные серверные приложения представляют собой многоярусные системы, включающие множество компонентов и сервисов. Архитекторы программного обеспечения часто выделяют в отдельный модуль всё, что связано с рассылкой SMS, системами сбора статистики, подсистемами авторизации и другими подобными задачами. Это позволяет разбить огромные задачи на меньшие, упрощая разработку, распределяя нагрузку и повышая отказоустойчивость. Всё это тесно связано с микросервисной архитектурой.

Зачем нужны системы обмена сообщениями?

В распределённых системах необходимо передавать данные между сервисами. Для этого используются системы обмена сообщениями (брокеров сообщений, диспетчеров сообщений) – разветвлённые системы, в которые можно «бросать» сообщения с одного конца, а с другого – получать их. Apache Kafka – одна из таких систем, обеспечивающая коммуникацию между сервисами. Грамотно выстроенная система позволяет компонентам ставить друг другу задачи, сообщать об изменениях и уведомлять заинтересованные части приложения о своих состояниях.

Например, в интернет-магазине после регистрации нового пользователя сервис авторизации отправляет сообщение в сервис email-рассылки для отправки приветственного письма и в сервис сбора статистики для обновления графиков в админке.

Apache Kafka: преимущества и недостатки

Системы обмена сообщениями, такие как Kafka, полезны, но добавляют сложность и проблемы в обслуживание приложения. Шина передачи данных может стать узким местом: даже если сервисы не загружены на максимум, ограниченный ресурс шины может парализовать всю систему. Потеря данных в шине также может нарушить состояние системы. Потеря статистических данных – это одно, но потеря финансовых данных или информации о важных заказах – совсем другое.

Apache Kafka решает эти проблемы, являясь сверхмасштабируемой и гибкой системой обмена сообщениями. Ключевые преимущества:

  • Масштабируемость и отказоустойчивость: Kafka – распределённая система, серверы которой объединяются в кластеры. Хранение и пересылка сообщений происходит параллельно на разных серверах, обеспечивая высокую надёжность и отказоустойчивость. Даже при выходе из строя нескольких машин, сообщения продолжают обрабатываться. Горизонтальное масштабирование легко реализуется путём добавления новых серверов. В отличие от баз данных, где такой подход сложнее, Kafka изначально спроектирован для взрывного роста производительности.
  • Консистентность данных: Данные в Kafka хранятся в виде журналов коммитов (последовательности записей), которые можно только добавлять, но нельзя удалять или модифицировать. Это обеспечивает высокую надёжность и простоту отслеживания изменений.
  • Дополнительные возможности: Хранение сообщений на диске, репликация данных и другие функции.

Использование Apache Kafka

Apache Kafka используется для:

  • Связи микросервисов: Сервисы обмениваются сообщениями, реагируя на действия друг друга или подписываясь на обновления.
  • Организации потоков данных: Kafka идеально подходит для обработки потоков событий, передавая их по цепочке и обрабатывая на каждом этапе.
  • Агрегации данных: Данные записываются в Kafka быстрее, чем в обычную базу данных. Это позволяет собирать метрики, вычислять средние значения и записывать результаты в БД.
  • Сбора логов: Kafka позволяет хранить логи в течение определённого времени, разгружая медленные системы логирования.

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

Что будем искать? Например,программа