Можно ли освободить поток Kafka consumer, переложив сообщение в очередь в памяти и обрабатывая его в другом потоке?

Можно разделить poll и обработку, но очередь в памяти не является подтверждением надёжного результата. Offset фиксируют только после завершения обработки, а доступ к KafkaConsumer остаётся у одного управляющего потока.

Короткий ответ

Что ответить на собеседовании

Можно разделить poll и обработку, но очередь в памяти не является подтверждением надёжного результата. Offset фиксируют только после завершения обработки, а доступ к KafkaConsumer остаётся у одного управляющего потока.

Подробный разбор

Ответ с пояснениями

Можно разделить poll и обработку, но очередь в памяти не является подтверждением надёжного результата. Offset фиксируют только после завершения обработки, а доступ к KafkaConsumer остаётся у одного управляющего потока.

Очередь должна быть ограниченной; при заполнении partition ставят на pause, продолжая обслуживание poll/heartbeat по правилам клиента. Завершения передают обратно управляющему потоку и коммитят непрерывно обработанный диапазон каждой partition. При rebalance учитывают незавершённую работу. Commit сразу после enqueue создаёт риск потери при падении процесса; без идемпотентности повторная доставка создаст дубли.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее