Брокер сообщений, логи
📩 Что такое брокер сообщений и для чего он нужен?
Брокер сообщений — это компонент архитектуры, который выступает посредником между различными частями системы. Он помогает системам обмениваться данными, снимая нагрузку с веб-сервисов, так как им не нужно напрямую пересылать сообщения друг другу.
В брокере сообщений есть две ключевые роли:
- Producer (издатель) 📝 — создаёт и отправляет сообщения.
- Consumer (потребитель/подписчик) 📥 — получает и обрабатывает сообщения.
Сообщения могут передаваться двумя способами:
- Прямо от отправителя к получателю — каждое сообщение используется только один раз.
- Схема публикации/подписки (Pub/Sub) 🔄 — продюсер публикует сообщение в топик, а все подписчики получают его. Так можно строить распределение задач между подписчиками, где каждый получает только свои сообщения.
⚡ Преимущества брокеров сообщений перед API:
- Асинхронная передача данных, не блокирующая работу системы.
- Повышение производительности за счёт разгрузки сервисов.
- Надёжная доставка с повторной отправкой и маршрутизацией сообщений.
❌ Недостатки:
- Усложнение архитектуры.
- Возможные проблемы с консистентностью данных.
- Отладка распределённой системы сложнее.
🛠 Когда полезны:
- Долгие и ресурсоёмкие задачи.
- Микросервисы для координации сервисов через топики.
- Мобильные приложения с push-уведомлениями.
- Транзакционные системы с последовательными этапами обработки.
🏭 Apache Kafka: продюсеры, брокеры, консумеры
Как устроен Kafka
- Producer 📝 — приложение, отправляющее сообщения в кластер Kafka.
- Broker 💻 — сервер, который хранит данные и распределяет их между консумерами.
- Consumer 📥 — приложение, читающее сообщения из Kafka.
Kafka работает через логи 📜 — упорядоченные по времени записи событий. Каждое событие добавляется в конец лога и остаётся неизменным.
Топики, партиции и сегменты
- Топик 🗂 — логическая группа сообщений (например, статусы заказов).
- Партиции 🔹 — деление топика на части для масштабирования. Каждая партиция — строго упорядоченный лог.
- Сегменты 📄 — файлы на диске, в которых хранятся сообщения партиций.
Каждое сообщение имеет offset — порядковый номер. Партиции могут реплицироваться для отказоустойчивости.
Продюсеры и партицирование
Продюсер сам выбирает, в какую партицию писать сообщение:
- По ключу (hash-based) 🔑 — гарантирует порядок сообщений для одного ключа.
- Round-robin 🔄 — равномерное распределение сообщений без гарантии порядка.
Семантики доставки сообщений
- At-most-once ❌ — можно потерять сообщения, но дубликатов нет.
- At-least-once ✅ — сообщения не теряются, но возможны дубликаты.
- Exactly-once 🎯 — каждое сообщение доставлено ровно один раз.
Консумеры и консумер-группы
- Consumer 📥 — читает сообщения из партиций.
- Consumer group 👥 — несколько консумеров читают партиции кооперативно.
- Heartbeat и session timeout ⏱ — проверка живости консумеров.
- Ребалансировка 🔄 — перераспределение партиций при добавлении/удалении консумеров.
📝 Логи: что это и зачем смотреть
Что такое логи
Логи — это записи событий и сообщений системы. Они помогают понять, что происходит внутри приложения.
Когда смотреть логи
- Тестирование новой функциональности 🧪
- Регрессионное тестирование 🔄
- Проверка взаимодействия с внешними системами 🌐
- Отладка ошибок 🐞
- Оценка производительности ⚡
Уровни логирования
- FATAL 💀 — критическая ошибка, ведущая к завершению программы.
- ERROR ❌ — ошибка, требующая вмешательства.
- WARN ⚠️ — предупреждение о потенциальной проблеме.
- INFO ℹ️ — информация о ходе работы.
- DEBUG 🐛 — подробные данные для отладки.
- TRACE 🔍 — максимально подробная информация, шаги выполнения.
Виды логов
- Application logs 🖥 — события внутри приложения.
- Server logs 🖧 — ошибки и запросы на сервере.
- System logs ⚙️ — работа ОС и системные события.
Что хранится в логах
- Время и дата события 🕒
- Уровень логирования
- Контекст системы или модуля 🏷
- Текст сообщения
- Стек вызовов при ошибках 🧾
🔧 Инструменты для просмотра логов
Почитай тут https://habr.com/ru/companies/yandex_praktikum/articles/739058/
А посмотри вот здесь:
https://youtu.be/keBrfAhFiP4?si=PCnASeFENyotAuDn