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