Есть отличная серия статей о транзакциях Kafka и о точной доставке.
В одном из них автор говорит о потребителях:
Таким образом, на стороне потребителя у вас есть две опции для чтения транзакционных сообщений, выраженные через конфигурацию потребителя «изоляция.уровень»:
read_committed: Помимо чтения сообщений, не являющихся частью транзакции, также можно читать те, которые после
транзакция совершена.
read_uncommitted: читать все сообщения в порядке смещения, не дожидаясь принятия транзакций. Эта опция похожа на
текущая семантика потребителя Kafka.
То есть обычные потребительские приложения должны указывать read_committed
, если единственное, кто хочет прочитать записи коммитов из темы.
Однако относительно потоков Кафки:
Все, что вам нужно, чтобы приложение Streams использовалось ровно один раз
семантика, это установить этот конфиг «processing.guarantee = точно_once».
Это приводит к тому, что вся обработка происходит ровно один раз; этот
включает в себя как обработку, а также все материализованное
состояние, созданное заданием обработки, которое записывается обратно в Kafka,
ровно один раз.
Ничего явно не сказано о чтениях в KStream. Когда настроено exactly_once
, KStream читает только зафиксированные сообщения?