Вопрос проверяет понимание модели хранения данных в Kafka и различий между брокером сообщений и очередью.
Kafka не удаляет сообщения после чтения, потому что consumer не владеет сообщением. Сообщения хранятся в топике согласно политике retention. Каждый consumer читает сообщения независимо, используя offset’ы. Это позволяет нескольким consumer-группам читать одни и те же данные. Такой подход делает Kafka логом, а не очередью.
Kafka изначально спроектирована не как очередь, а как распределённый commit log.
Kafka topic — это неизменяемый лог сообщений, в который данные только дописываются и читаются по смещению (offset).
Перед перечислением важно понять, что чтение не изменяет состояние брокера.
Producer пишет сообщения в partition
Сообщения получают offset
Consumer читает сообщения по offset
Offset сохраняется отдельно от данных
Удаление сообщений после чтения нарушило бы ключевые свойства Kafka.
Независимые consumer-группы
Каждая группа читает в своём темпе
Нет конфликта между потребителями
Повторное чтение
Можно перечитать данные
Можно восстановить состояние
Высокая пропускная способность
Нет координации удаления
Минимум синхронизации
Удаление происходит по правилам retention.
По времени (retention.ms)
По размеру (retention.bytes)
Через log compaction (для key-based данных)
Kafka хранит сообщения независимо от чтения. Это делает её надёжным и масштабируемым логом событий, а не классической очередью.