Автор: Евгений Мунин
Давайте познакомимся с Apache Kafka. Мы напишем демо-пример Kafka Consumer'а на Python и запустим его в Confluent Cloud.
Представим, что мы разрабатываем рекомендательную систему для электронной коммерции маркетплейса. Пользователь заходит на его страницу, и в этот момент мы должны сделать рекомендацию товара (предполагая покупку пользователя). Мы можем обучить модель офлайн предсказывать отклик на наши рекомендации . Затем на проде на каждое событие входа пользователя дергаем модель, передаем ей на вход данные о сессии пользователя для создания ею предсказания.
Предположим, что мы предсказываем рекомендации для стороннего маркетплейса. Он общается с нами HTTP запросами. В случае проблем на нашей стороне входные данные о сессии пользователя могут потеряться. Что нам тогда делать?
Рисунок 1. Рекомендательная система в случае общения с третье-сторонним сервисом
На помощь приходит Apache Kafka! Это платформа для потоковой передачи данных с открытым исходным кодом. Ее можно сделать независимой от нашего рекомендательного сервиса и сохранять входные данные в буфер, а главное — делать это распределенным образом. Несмотря на то что ее код написан на Java, существуют API, позволяющие использовать Python, Scala и другие языки. Мы можем представить Kafka как инструмент распределенной обработки входных данных и последующего их хранения. У пользователей есть возможность читать эти данные и применять их по назначению.
Прежде всего давайте поймем, из каких компонентов состоит Kafka и как они между собой взаимодействуют.
Итак, начнем с определений:
Топик
Это суть нашего набора данных. Мы можем рассматривать ее как контейнер, в котором хранятся события (сообщения/записи). Топик — это как журнал событий. Мы можем оставить запись в его конец. За счет такой структуры и алгоритма записи кафка очень быстро записывает новые сообщения. А еще мы можем настроить период хранения данных в топике для экономии места.