Использование Kafka Streams 2.6.2 и запуск агрегаций с отслеживанием состояния с семантикой Exactly once.
Логика обработки такова:
потребление входных записей -> промежуточные агрегированные и буферные данные в хранилище состояний, поддерживаемые темой журнала изменений -> пунктуация каждые 15 секунд - очистка хранилища состояний и отправка агрегированных записей вниз по течению -> окончательная операция агрегирования и отправка в выходную тему
Поскольку мы используем точечные экземпляры, один из модулей был перезапущен, и была запущена перебалансировка, а состояние восстанавливалось из темы журнала изменений.
Мы заметили исключения ProducerFenced:
org.apache.kafka.common.errors.ProducerFencedException: Producer попытался выполнить
операцию со старой эпохой. Либо есть более новый производитель с тем же transactionalId, либо транзакция производителя была просрочена брокером.
После этого несколько разделов зависли, и записи не были обработаны, пока мы не перезапустили приложение.
Мы настроили:
transaction.timeout.ms на 30 секунд
session.timeout.ms на 30 секунд
Не могли бы вы посоветовать, есть ли какое-либо известное исправление для этого пограничного случая?
Не уверен, поможет ли дальнейшее обновление transaction.timeout.ms или уменьшение интервала между знаками препинания?