kafka-microservices

0
README.md

evo-managed-kafka-microservices Kafka Microservices

Микросервисная архитектура на базе NestJS и Apache Kafka для демонстрации архитектуры на основе брокеров сообщений.

Пример носит демонстрационный характер без реальной реализации сервисов.

Описание

Проект представляет собой монорепозиторий с тремя микросервисами, взаимодействующими через Apache Kafka:

  • API Service - REST API для приема HTTP-запросов и публикации событий в Kafka
  • Orders Service - сервис обработки заказов, подписанный на топик заказов
  • Notifications Service - сервис уведомлений, подписанный на топик заказов

Архитектура

┌─────────┐ HTTP ┌─────────┐ │ Client │ ──────────────> │ API │ └─────────┘ └────┬────┘ │ │ Kafka Producer │ (orders-topic) │ ┌────────────┴────────────┐ │ │ ▼ ▼ ┌──────────────────────────────────────┐ │ Apache Kafka Broker │ │ (orders-topic) │ └────────────┬─────────────────────────┘ │ │ Kafka Consumers │ ┌────────────┴────────────┐ │ │ ▼ ▼ ┌──────────────┐ ┌──────────────┐ │ Orders │ │Notifications │ │ Service │ │ Service │ │ (Consumer) │ │ (Consumer) │ └──────────────┘ └──────────────┘

Поток данных:

  1. Клиент отправляет HTTP POST запрос на API сервис
  2. API сервис валидирует данные и публикует событие в Kafka топик
    orders-topic
  3. Orders Service и Notifications Service подписаны на этот топик и получают события параллельно
  4. Каждый сервис обрабатывает событие независимо

Технологический стек

  • NestJS - фреймворк для построения масштабируемых Node.js приложений
  • Apache Kafka - распределенная платформа потоковой обработки данных
  • TypeScript - типизированный JavaScript
  • Docker - контейнеризация приложений
  • Docker Compose - оркестрация микросервисов

Структура проекта

kafka_microservices/ ├── apps/ │ ├── api/ # API сервис (REST API + Kafka Producer) │ │ ├── src/ │ │ │ ├── orders/ # Контроллер заказов │ │ │ ├── kafka/ # Модуль Kafka │ │ │ └── main.ts # Точка входа │ │ └── Dockerfile │ ├── orders/ # Сервис обработки заказов (Kafka Consumer) │ │ ├── src/ │ │ │ ├── orders/ # Обработчик событий заказов │ │ │ └── main.ts # Точка входа │ │ └── Dockerfile │ └── notifications/ # Сервис уведомлений (Kafka Consumer) │ ├── src/ │ │ ├── notifications/ # Обработчик уведомлений │ │ └── main.ts # Точка входа │ └── Dockerfile ├── shared/ │ └── dto/ # Общие DTO для всех сервисов │ └── create-order.dto.ts ├── docker-compose.yml # Конфигурация для внешнего Kafka └── package.json # Зависимости и скрипты проекта

Требования

  • Node.js (версия 18 или выше)
  • Yarn
  • Docker и Docker Compose
  • Apache Kafka (локально или удаленно)

Установка

  1. Клонируйте репозиторий:
  1. Установите зависимости:
  1. Создайте файл
    .env
    в корне проекта:

Или создайте

.env
вручную на основе
.env.example
. Пример минимальной конфигурации:

Запуск

Локальная разработка

Запуск всех сервисов в режиме разработки:

Запуск через Docker Compose

Использует

docker-compose.yml
и требует внешний Kafka брокер:

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

Swagger документация

После запуска API сервиса, Swagger документация доступна по адресу:

Создание заказа

Ответ:

Параметры запроса:

  • email
    (string, required) - Email адрес клиента
  • goodId
    (string, required) - ID товара/продукта
  • count
    (number, required, min: 1) - Количество товара

После публикации заказа в Kafka, события автоматически получают:

  • Orders Service - обрабатывает заказ
  • Notifications Service - отправляет уведомление

Переменные окружения

ПеременнаяОписаниеЗначение по умолчаниюГде используется
KAFKA_BROKERS
Адреса брокеров Kafka (через запятую)
localhost:9092
Все сервисы
API_PORT
Порт API сервиса
3000
API сервис
KAFKA_CLIENT_ID_API
ID клиента для API сервиса
api-service
API сервис
KAFKA_CLIENT_ID_ORDERS
ID клиента для Orders сервиса
orders-service
Orders сервис
KAFKA_CLIENT_ID_NOTIFICATIONS
ID клиента для Notifications сервиса
notifications-service
Notifications сервис
KAFKA_TOPIC_ORDERS
Название топика для заказов
orders-topic
Все сервисы
KAFKA_USERNAME
Логин для Kafka (SASL)-Все сервисы (опционально)
KAFKA_PASSWORD
Пароль для Kafka (SASL)-Все сервисы (опционально)
KAFKA_SASL_MECHANISM
Механизм SASL (
plain
,
scram-*
)
scram-sha-512
Все сервисы (опционально)
KAFKA_SSL
Включить SSL (
true
/
false
)
false
Все сервисы (опционально)
NODE_ENV
Окружение выполнения-Docker контейнеры

Доступные команды

Разработка

  • yarn build
    - сборка проекта
  • yarn start
    - запуск проекта (по умолчанию API)
  • yarn start:dev
    - запуск в режиме разработки с hot-reload
  • yarn start:debug
    - запуск в режиме отладки
  • yarn start:prod
    - запуск в production режиме

Запуск отдельных сервисов

  • yarn start:api
    - запуск API сервиса
  • yarn start:api:dev
    - запуск API сервиса в режиме разработки
  • yarn start:orders
    - запуск Orders сервиса
  • yarn start:orders:dev
    - запуск Orders сервиса в режиме разработки
  • yarn start:notifications
    - запуск Notifications сервиса
  • yarn start:notifications:dev
    - запуск Notifications сервиса в режиме разработки

Docker команды

  • yarn docker:build
    - сборка Docker образов
  • yarn docker:deploy
    - развертывание через Docker Compose
  • yarn docker:down
    - остановка контейнеров
  • yarn docker:logs
    - просмотр логов всех сервисов

Инструменты разработки

  • yarn lint
    - проверка кода линтером с автоматическим исправлением
  • yarn format
    - форматирование кода с помощью Prettier

Лицензия

Этот проект распространяется под лицензией MIT. См. файл LICENSE для подробностей.