Ответ
Топик (topic) в Kafka — это именованный канал или категория, в которую публикуются сообщения. Это основная абстракция для организации данных. Производители (producers) пишут в топики, а потребители (consumers) читают из них.
Ключевые функции и характеристики топиков:
- Логическая группировка сообщений: Аналогия — таблица в БД или папка в файловой системе. Все сообщения определённого типа (например,
user-events,payment-transactions) отправляются в соответствующий топик. - Многопоточное потребление: Топик делится на партиции (partitions). Это позволяет:
- Масштабировать обработку: Разные партиции могут обрабатываться разными потребителями в группе.
- Гарантировать порядок: Порядок сообщений гарантирован только в пределах одной партиции.
- Хранение и retention: Сообщения в топике хранятся на диске в течение заданного времени или до достижения лимита размера.
- Репликация: Каждая партиция реплицируется на несколько брокеров для отказоустойчивости.
Пример:
# Создание топика с 3 партициями и фактором репликации 2
kafka-topics --create --topic orders --partitions 3 --replication-factor 2 --bootstrap-server localhost:9092
// Producer отправляет сообщение в топик "orders"
ProducerRecord<String, Order> record = new ProducerRecord<>("orders", orderId, order);
kafkaProducer.send(record);
// Consumer подписывается на топик "orders"
kafkaConsumer.subscribe(List.of("orders"));
ConsumerRecords<String, Order> records = kafkaConsumer.poll(Duration.ofMillis(100));
Почему это важно? Топики обеспечивают decoupling (развязку) между производителями и потребителями, высокую пропускную способность за счёт партиционирования и надёжное хранение потоков данных.