Карта / Kafka / Topic

Topic

Topic — именованный поток сообщений в Kafka, по сути аналог таблицы в базе данных или папки на диске — место, куда Producer кладёт сообщения определённого вида, а Consumer читает их оттуда.

Producer Order Service Topic "orders" msg#1 msg#2 msg#3 лог — не удаляется Email Service Consumer Group A Analytics Consumer Group B
producer.send(new ProducerRecord<>("orders", "order-123", orderData));      // в топик "orders"
producer.send(new ProducerRecord<>("user-events", "user-5", eventData));     // в топик "user-events"

consumer.subscribe(List.of("orders"));   // подписаться на конкретный топик

Топик orders обычно содержит только сообщения про заказы, user-events — про действия пользователей. Разные сервисы могут подписываться на одни и те же топики независимо друг от друга.

Копнуть глубже

Топик — это не просто “очередь”, а упорядоченный, неизменяемый журнал (log). Сообщения в топике хранятся последовательно, в порядке поступления, и (в отличие от классических очередей вроде RabbitMQ) не удаляются сразу после прочтения — хранятся настроенное время (например, 7 дней), и несколько разных consumer’ов могут читать один и тот же топик независимо, каждый со своей позицией.

Несколько Consumer Group могут читать один топик параллельно, не мешая друг другу. Например, топик orders могут одновременно читать и email-service (отправить подтверждение), и analytics-service (посчитать статистику) — оба видят все сообщения топика, независимо друг от друга, потому что у каждого своя позиция чтения (offset, см. тему «Offset, партиции»).

Это принципиально отличает Kafka-топик от классической очереди, где сообщение исчезает после того, как его забрал один получатель.

🎤 Закрыл тему, если можешь объяснить:
• что такое топик и аналогию с таблицей/журналом;
• почему несколько разных Consumer Group могут читать один топик независимо друг от друга (если дошёл до 2-го слоя).