Перейти к содержанию

Нейминг Kafka Consumer Group

Имя группы должно однозначно отвечать на вопросы: "Кто потребляет?" и "С какой целью?".

Общая схема именования Consumer Group:

{env}.{system-code}.{system-name}.{consumer-service-name}.{domain}.{purpose}

Компоненты имени Consumer Group

Каждый компонент в имени несет определенную смысловую нагрузку, обеспечивая его уникальность и информативность.

Компонент Описание Пример
{env} Среда. Определяет окружение, в котором работает потребитель. Полностью совпадает с компонентом в имени топика. prod
{system-code}.{system-name} Система-владелец. Уникальный код и имя системы, в рамках которой работает потребитель. Гарантирует глобальную уникальность и определяет зону ответственности. 1234.geo
{consumer-service-name} Сервис-потребитель. Системное имя микросервиса, который является потребителем. Это ключевой компонент для отладки, позволяющий сразу определить, какой именно сервис читает сообщения. geocoding-service, vrp-solver, notifications-gateway
[{client-system-name} \| common] (Опционально) Контекст потребления. Используется только для потребителей публичных топиков, чтобы отразить гибридную стратегию.
{client-system-name}: для изолированных топиков (API с ограниченным ресурсом).
common: для общих топиков (API с неограниченным ресурсом).
Для внутренних топиков этот сегмент не используется.
crm, common
{domain} Бизнес-домен. Домен, к которому относятся обрабатываемые сообщения. Как правило, совпадает с доменом из имени топика. geocoding, vrp, geosuggest
{purpose} Назначение потребителя. Краткое описание цели, с которой сервис потребляет сообщения из топика. Используются существительные или герундий.
processor: основная бизнес-обработка.
validator: предварительная валидация.
persistor: сохранение в базу данных.
logger: логирование.
aggregator: агрегация данных.
dlq-handler: обработчик сообщений из DLQ.
processor, persistor, dlq-handler

Принципы и рекомендации

  1. Уникальность на уровне логики: Каждая уникальная бизнес-логика обработки сообщений в рамках одного микросервиса должна использовать свою собственную Consumer Group. Если один и тот же сервис читает один и тот же топик для разных целей (например, для обработки и для аналитики), необходимо создать две разные группы.
  2. Изоляция для квотирования: Для публичных топиков с ограниченным ресурсом (Resource-Constrained) для каждого клиента ({client-system-name}) создается отдельная Consumer Group. Это позволяет останавливать и запускать потребителей для конкретного клиента для управления квотами, не затрагивая других.
  3. Ясность и информативность: Имя должно быть легко читаемым и понятным для инженеров поддержки, DevOps и разработчиков. Оно должно давать исчерпывающую информацию о потребителе без необходимости смотреть в код или документацию.

Примеры именования Consumer Group

В таблице ниже приведены примеры имен Consumer Group для различных сценариев, описанных в архитектуре.

Сценарий Потребляемый топик (для контекста) Имя Consumer Group Комментарий
Внутренняя коммуникация ...internal.events.geocoding.address.processed prod.1234.geo.enrichment-service.geocoding.processor Сервис enrichment-service слушает события об успешном геокодировании для их последующего обогащения.
...internal.events.enrichment.geodata.enriched prod.1234.geo.vrp-solver.enrichment.persistor Сервис vrp-solver слушает события об обогащении, чтобы сохранить свежие данные в свою локальную БД.
Обработка команд из изолированного public-топика ...public.commands.crm.geocoding.address.process prod.1234.geo.geocoding-service.crm.geocoding.processor Сервис geocoding-service обрабатывает команды только от клиента crm. Наличие crm в имени группы критично для управления квотами.
...public.commands.delivery-service.vrp.solution.solve prod.1234.geo.vrp-solver.delivery-service.vrp.processor Сервис vrp-solver обрабатывает команды на решение VRP только от клиента delivery-service.
Обработка команд из общего public-топика ...public.commands.common.geosuggest.query.process prod.1234.geo.geosuggest-service.common.geosuggest.processor Сервис geosuggest-service обрабатывает команды на геосаджест из общего топика для всех клиентов.
...public.commands.common.geospatial.calculation.calculate prod.1234.geo.geospatial-service.common.geospatial.processor Сервис geospatial-service обрабатывает команды на пространственные вычисления из общего топика.
Служебные потребители (DLQ) ...public.commands.crm.geocoding.address.process.dlq prod.1234.geo.support-tools.crm.geocoding.dlq-handler Специальный инструмент или сервис для разбора "мертвых" сообщений от клиента crm.
...internal.events.enrichment.geodata.enriched.dlq prod.1234.geo.support-tools.internal.enrichment.dlq-handler Потребитель для разбора сбоев во внутренней шине данных.

Что дальше?

  1. Нашли эту статью полезной? Поделитесь ею и помогите распространить знания!
  2. Нашли ошибку или есть идеи 💡 о том, что и как я могу улучшить? Напишите мне в Telegram.
  3. Хотите узнать обо мне больше? Читайте здесь.