kafka-microservices
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
3 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
3 месяца назад
4 месяца назад
3 месяца назад
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) │
└──────────────┘ └──────────────┘
Поток данных:
- Клиент отправляет HTTP POST запрос на API сервис
- API сервис валидирует данные и публикует событие в Kafka топик orders-topic
- Orders Service и Notifications Service подписаны на этот топик и получают события параллельно
- Каждый сервис обрабатывает событие независимо
Технологический стек
- 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 (локально или удаленно)
Установка
- Клонируйте репозиторий:
- Установите зависимости:
- Создайте файл
в корне проекта:.env
Или создайте вручную на основе .env. Пример минимальной конфигурации:.env.example
Запуск
Локальная разработка
Запуск всех сервисов в режиме разработки:
Запуск через Docker Compose
Использует и требует внешний Kafka брокер:docker-compose.yml
Использование API
Swagger документация
После запуска API сервиса, Swagger документация доступна по адресу:
Создание заказа
Ответ:
Параметры запроса:
(string, required) - Email адрес клиентаemail(string, required) - ID товара/продуктаgoodId(number, required, min: 1) - Количество товараcount
После публикации заказа в Kafka, события автоматически получают:
- Orders Service - обрабатывает заказ
- Notifications Service - отправляет уведомление
Переменные окружения
| Переменная | Описание | Значение по умолчанию | Где используется |
|---|---|---|---|
| Адреса брокеров Kafka (через запятую) | | Все сервисы |
| Порт API сервиса | | API сервис |
| ID клиента для API сервиса | | API сервис |
| ID клиента для Orders сервиса | | Orders сервис |
| ID клиента для Notifications сервиса | | Notifications сервис |
| Название топика для заказов | | Все сервисы |
| Логин для Kafka (SASL) | - | Все сервисы (опционально) |
| Пароль для Kafka (SASL) | - | Все сервисы (опционально) |
| Механизм SASL (, ) | | Все сервисы (опционально) |
| Включить SSL (/) | | Все сервисы (опционально) |
| Окружение выполнения | - | Docker контейнеры |
Доступные команды
Разработка
- сборка проектаyarn build- запуск проекта (по умолчанию API)yarn start- запуск в режиме разработки с hot-reloadyarn start:dev- запуск в режиме отладкиyarn start:debug- запуск в production режимеyarn start:prod
Запуск отдельных сервисов
- запуск API сервисаyarn start:api- запуск API сервиса в режиме разработкиyarn start:api:dev- запуск Orders сервисаyarn start:orders- запуск Orders сервиса в режиме разработкиyarn start:orders:dev- запуск Notifications сервисаyarn start:notifications- запуск Notifications сервиса в режиме разработкиyarn start:notifications:dev
Docker команды
- сборка Docker образовyarn docker:build- развертывание через Docker Composeyarn docker:deploy- остановка контейнеровyarn docker:down- просмотр логов всех сервисовyarn docker:logs
Инструменты разработки
- проверка кода линтером с автоматическим исправлениемyarn lint- форматирование кода с помощью Prettieryarn format
Лицензия
Этот проект распространяется под лицензией MIT. См. файл LICENSE для подробностей.