Интеграция с Kafka I. Паттерн Transactional Outbox

В этом уроке мы начнем выстраивать систему асинхронного взаимодействия с помощью брокера сообщений Apache Kafka между микросервисами Orders Service и новым Dispatcher Service, который мы будем разрабатывать в следующем уроке (он не будет содержать реальной бизнес-логики, а лишь имитировать обработку заказа).

Доработка функционала Orders Service будет происходить на основе кода предыдущего урока, который вы закоммитили в ветку master.
Для начала рассмотрим пользовательский сценарий:

Клиент онлайн-кафе просматривает меню и формирует корзину, после этого оформляет заказ и ожидает его подтверждения по одному из указанных в профиле контактов. Во время ожидания клиент имеет возможность взаимодействовать с сервисом. Подтверждение заказа может занять от нескольких секунд до нескольких минут.

В этом сценарии ключевым аспектом является возможность клиента взаимодействовать с системой во время ожидания подтверждения заказа. Если наш бэкенд будет использовать синхронное взаимодействие между микросервисами, отвечающими за прием заказа (Orders Service) и за его проверку и дальнейшую обработку, то на фронте могут возникнуть серьезные трудности с реализацией этого аспекта. Чтобы избежать таких проблем, мы будем использовать асинхронную событийную модель взаимодействия, позволяющую нашим микросервисам быть слабо связанными (loosely coupled) между собой.

Верхнеуровнево систему взаимодействия можно описать следующим образом: release
Фактически при создании заказа в брокер сообщений отправляется соответствующее событие (OrderPlacedEvent), содержащее необходимую информацию. Orders Service в этом случае выступает в качестве производителя сообщений - Producer. Далее Dispatcher Service получает из брокера сообщений отправленное событие и обрабатывает его, выступая в роли потребителя - Consumer. После этого цепочка повторяется, но на этот раз Dispatcher Service выступает в роли Producer, отправляя сообщение OrderDispatchedEvent, а Orders Service в свою очередь обрабатывает его, являясь Consumer-ом. Таким образом, оба микросервиса ничего не знают друг о друге, а все взаимодействие осуществляется через посредника - брокера сообщений.

Доступ после оплаты курса


Общая информация по Apache Kafka

  • Кластер с брокерами сообщений
  • Топики, партиции и репликация данных
  • Консьюмеры
  • Продъюсеры
  • Управление кластерной конфигурацией
  • Дополнительные материалы

Transactional Outbox: используемые технологии

  • Kafka Connect
  • Debezium Postgres Connector
  • Сериализация / десериализация. Avro
  • Confluent Schema Registry

Transactional Outbox: реализация

  • Схема взаимодействия
  • Запуск Postgres в одном контейнере
  • Контейнеры для Kafka, Confluent Schema Registry, Kafka Connect
  • Сохранение в таблице Outbox
  • Настройки Debezium Postgres Connector
  • Регистрируем и проверяем работоспособность коннектора

Занятие 7: Интеграция с Kafka II