Нейминг Kafka Consumer Group
Имя группы должно однозначно отвечать на вопросы: "Кто потребляет?" и "С какой целью?".
Общая схема именования Consumer Group:
Компоненты имени 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 |
Принципы и рекомендации
- Уникальность на уровне логики: Каждая уникальная бизнес-логика обработки сообщений в рамках одного микросервиса должна использовать свою собственную Consumer Group. Если один и тот же сервис читает один и тот же топик для разных целей (например, для обработки и для аналитики), необходимо создать две разные группы.
- Изоляция для квотирования: Для публичных топиков с ограниченным ресурсом (
Resource-Constrained
) для каждого клиента ({client-system-name}
) создается отдельная Consumer Group. Это позволяет останавливать и запускать потребителей для конкретного клиента для управления квотами, не затрагивая других. - Ясность и информативность: Имя должно быть легко читаемым и понятным для инженеров поддержки, 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 |
Потребитель для разбора сбоев во внутренней шине данных. |