Ответ
Да, в Apache Kafka сообщения логируются и хранятся. Это его фундаментальный принцип работы.
1. Основная концепция: Commit Log Kafka представляет собой распределенный, отказоустойчивый commit log. Все публикуемые сообщения записываются в конец лога (append-only) и сохраняются на диск.
2. Структура хранения:
- Топик (Topic): Логическая категория или поток сообщений.
- Партиция (Partition): Топик делится на партиции — упорядоченные, неизменяемые последовательности записей.
- Смещение (Offset): Уникальный, последовательно возрастающий идентификатор сообщения внутри партиции.
3. Практический пример:
# Сообщение публикуется в топик `user-actions`
echo '{"userId": 123, "action": "login"}' | kafka-console-producer
--topic user-actions
--bootstrap-server localhost:9092
# Сообщение записывается в одну из партиций топика и получает offset.
4. Ключевые настройки хранения:
log.retention.hours: Время хранения сообщений (по умолчанию 168 часов / 7 дней).log.retention.bytes: Максимальный общий размер лога на партицию перед удалением старых сегментов.
Таким образом, Kafka не просто передает сообщения, а надежно сохраняет их, позволяя потребителям читать данные в любом темпе и с любого смещения (offset).