Ответ
Топик в Apache Kafka — это именованный логический поток или категория, в которую производители (producers) записывают сообщения, а потребители (consumers) из него читают. Это основная абстракция для организации данных. Можно представить топик как таблицу в БД или тему в системе обмена сообщениями.
Ключевые характеристики топика:
- Партиционирование: Каждый топик делится на одну или несколько партиций. Это основа масштабируемости Kafka: разные партиции одного топика могут размещаться на разных брокерах, позволяя параллельно записывать и читать данные.
- Неизменяемость и порядок: Сообщения, записанные в партицию, являются неизменяемыми. Внутри одной партиции порядок сообщений гарантируется и каждое сообщение имеет уникальный, монотонно возрастающий идентификатор — offset.
- Репликация: Каждая партиция реплицируется на несколько брокеров (задается
replication-factor). Одна реплика является лидером (leader) для операций записи/чтения, остальные — последователями (followers) для отказоустойчивости.
Пример работы:
# Создание топика с 3 партициями и фактором репликации 2
kafka-topics.sh --create
--topic user-events
--partitions 3
--replication-factor 2
--bootstrap-server localhost:9092
# Запись сообщения в топик
kafka-console-producer.sh --topic user-events --bootstrap-server localhost:9092
> {"userId": 123, "action": "login"}
# Чтение сообщений с начала топика
kafka-console-consumer.sh --topic user-events --from-beginning --bootstrap-server localhost:9092
На практике мы проектируем топики вокруг бизнес-событий (например, orders, payments, user-tracking). Выбор количества партиций — это баланс между параллелизмом (больше партиций = больше параллельных потребителей) и накладными расходами.