сообщения и раскладываем по локальным очередям, сейчас коммит делаем после того как положили сообщения в локальную очередь. Вот решили что можем потерять сообщения если упадем, и делать более умный управляемый коммит. Может знает уже готовое, кейс вроде стандартный, должно же где то быть уже реализованное
Мы параллельно обрабатываем сообщения вычитанные из партиций кафки в очередь. Обработка так гораздо быстрее чем последовательно. Но при этом для коммита надо складывать обработанные оффсеты в непрерывную последовательность и потом коммитить иначе при восстановлении в случае сбоя не обработанные сообщения могут быть потеряны. Также приходится очень тщательно обрабатывать ошибки и следить за тем что код занимающийся параллельной обработкой не должен зависать. Если одно сообщение зависнет вас может порвать по памяти при накоплении непрерывной последовательности. Готового решения не встречал. Но в доке кафки написано что если захочется параллельной обработки партиции то надо делать примерно так как я описал.
хорошо, спасибо, тогда наверно выложу свою поделку, может кто посмотрит скажет где не прав
а backpressure не делаете, чтобы зависание не роняло приложение?
у нас очереди на каждую партицию отдельные и ограниченные если очередь заполнена перестаем читать партицию пока не разгребется очередь зависание кода обработчика мы не можем контролировать (там пользовательский код) поэтому у нас есть таймаут и если в течении этого таймаута код обработчика не возвращает управление то мы просто добавляем ооффсет этого сообщения к последовательности на коммит тут выбор либо блокировать и выходить изз групппы подписки либо продолжать с подвисшим потоком, мы выбрали продолжать
Обсуждают сегодня