У нас есть топология Java Kafka Streams, построенная с использованием Processor API.
В топологии у нас есть один процессор, который сохраняет в несколько хранилищ состояний.
Поскольку мы используем at_least_once, мы ожидаем увидеть некоторые несоответствия между государственными хранилищами - например, входящая запись приводит к записи как в хранилище состояний A, так и в B, но сбой между сохранениями приводит к тому, что только сохранение в хранилище A записывается в раздел журнала изменений Kafka.
Гарантируем ли мы, что порядок, в котором мы сохраняем, также будет порядком, в котором происходит запись в хранилища состояния? Например. если мы сначала сохраним в хранилище A, а затем в хранилище B, мы, конечно, можем иметь ситуацию, когда запись в оба журнала изменений была успешной, и ситуацию, когда была завершена только запись в журнал изменений A, - но мы можем также оказаться в ситуация, когда только запись в журнал изменений B была завершена?
Какие ситуации приведут к повторам? Конечно, сбой - но как насчет перебалансировки, нового лидера раздела брокера, или когда мы получим ошибку «Смещение фиксации не выполнено» (истекло время ожидания запроса)?
Некоторое время назад мы пытались использовать точно _once, что приводило к множеству сообщений об ошибках, которые не имели для нас смысла. Точно ли это даст нам атомарные записи в нескольких государственных магазинах?