Topic
Topic — именованный поток сообщений в Kafka, по сути аналог таблицы в базе данных или папки на диске — место, куда Producer кладёт сообщения определённого вида, а Consumer читает их оттуда.
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-го слоя).