Перейти к содержимому

Шаблон Kafka-топика

Шаблон описания Kafka-топика, producer и consumer.

Шаблон Kafka-топика

Описание Kafka-топика фиксирует назначение топика, producer, consumers, key, headers, payload, гарантии доставки, порядок сообщений, retry, DLQ и schema evolution.

Паспорт топика

ПолеЗначение
Название топика<domain.entity.event.v1>
Назначение<какие события публикуются>
Домен<домен / bounded context>
Владелец<команда / сервис>
Producer<service-name>
Consumers<service-a>, <service-b>
Версия схемыv1
СтатусDraft / Active / Deprecated

Назначение

Опишите бизнес-событийность, которую отражает топик.

Тип сообщения

ПараметрЗначение
ТипDomain Event / Integration Event / Command / Notification Event
ФорматJSON / Avro / Protobuf
СхемаSchema Registry / Git / Confluence
СовместимостьBackward / Forward / Full / None

Producer

ПолеЗначение
Сервис<producer-service>
Когда публикует<после какого события / транзакции>
Способ публикацииdirect publish / outbox / CDC
Гарантия публикации<описание>

Consumers

ConsumerConsumer groupНазначениеКритичность
<consumer-service><group-id><что делает>High / Medium / Low

Key

ПолеЗначение
Kafka key<fieldName>
Типstring / long / uuid
Зачем выбран<порядок / распределение / дедупликация>
Гарантия порядкаТолько внутри partition по одинаковому key

Headers

HeaderТипОбяз.Описание
correlationIdstringДаСквозная трассировка
causationIdstringНетID события/команды-источника
eventIdstringДаУникальный ID события
eventTypestringДаТип события
schemaVersionstringДаВерсия схемы
producerstringДаProducer-сервис

Payload

{
  "eventId": "evt-123",
  "eventType": "RequestCreated",
  "occurredAt": "2026-05-09T12:00:00Z",
  "data": {
    "requestId": "req-123",
    "status": "CREATED",
    "createdBy": "user-123"
  }
}

Описание payload

ПолеТипОбяз.Описание
eventIdstringДаУникальный ID события
eventTypestringДаТип события
occurredAtstringДаВремя события
data.requestIdstringДаID бизнес-объекта
data.statusstringДаНовый статус

Настройки топика

ПараметрЗначение
Partitions<N>
Replication factor<N>
Retention<N> дней/часов
Cleanup policydelete / compact / delete,compact
Max message size<N> КБ/МБ

Гарантии доставки

ВопросОтвет
Возможна повторная доставка?Да / Нет
Требуется идемпотентный consumer?Да / Нет
Требуется порядок сообщений?Да / Нет
Уровень порядкаpartition + key

Retry и DLQ

ПараметрЗначение
RetryДа / Нет
Количество попыток<N>
Backofffixed / exponential
Retry topics<topic.retry.1>
DLQ topic<topic.dlq>
Кто разбирает DLQ<команда / роль>

Schema evolution

ИзменениеДопустимо?Комментарий
Добавить необязательное полеДаОбычно совместимо
Удалить полеНет / после deprecateМожет сломать consumers
Изменить тип поляНетBreaking change
Добавить enumОсторожноСтарые consumers могут не обработать

Мониторинг

МетрикаОписание
Consumer lagОтставание consumer group
Messages in / outКоличество сообщений
Error rateДоля ошибок обработки
DLQ countСообщения в DLQ
Processing durationВремя обработки

Sequence diagram

@startuml
participant "Producer" as Producer
queue "Kafka Topic" as Topic
participant "Consumer" as Consumer
database "Consumer DB" as DB
Producer -> Topic: Publish event(key, headers, payload)
Consumer --> Topic: Poll message
Consumer -> Consumer: Validate schema
Consumer -> DB: Check eventId and process
Consumer --> Topic: Commit offset
@enduml

Открытые вопросы

IDВопросКому адресованСтатус
Q-001<вопрос><роль / ФИО>Открыт

Критерии приемки документа

IDКритерий
AC-DOC-001Документ согласован с владельцем продукта / архитектором / разработкой, если применимо.
AC-DOC-002Все спорные места вынесены в открытые вопросы или зафиксированы как ограничения.
AC-DOC-003В документе нет неоднозначных формулировок вроде “быстро”, “удобно”, “корректно” без измеримого критерия.