Точно ли однажды обработанная конфигурация в Kafka Stream гарантирует только чтение совершенных чтений? - PullRequest
1 голос
/ 26 июня 2019

Есть отличная серия статей о транзакциях Kafka и о точной доставке.
В одном из них автор говорит о потребителях:

Таким образом, на стороне потребителя у вас есть две опции для чтения транзакционных сообщений, выраженные через конфигурацию потребителя «изоляция.уровень»:

read_committed: Помимо чтения сообщений, не являющихся частью транзакции, также можно читать те, которые после транзакция совершена.

read_uncommitted: читать все сообщения в порядке смещения, не дожидаясь принятия транзакций. Эта опция похожа на текущая семантика потребителя Kafka.

То есть обычные потребительские приложения должны указывать read_committed, если единственное, кто хочет прочитать записи коммитов из темы.

Однако относительно потоков Кафки:

Все, что вам нужно, чтобы приложение Streams использовалось ровно один раз семантика, это установить этот конфиг «processing.guarantee = точно_once». Это приводит к тому, что вся обработка происходит ровно один раз; этот включает в себя как обработку, а также все материализованное состояние, созданное заданием обработки, которое записывается обратно в Kafka, ровно один раз.

Ничего явно не сказано о чтениях в KStream. Когда настроено exactly_once, KStream читает только зафиксированные сообщения?

1 Ответ

2 голосов
/ 26 июня 2019

Да. KStream будет читать только зафиксированные сообщения, это не указано в документации, но в StreamsConfig JavaDoc вы найдете информацию:

Если для «processing.guarantee» задано значение «точная_стать», Kafka Streams не позволяет пользователям перезаписывать следующие свойства (настройка потоков показана в скобках): «изоляция. уровень» (read_committed) - потребители всегда будут читать только зафиксированные данные «enable.idempotence» (true) - у продюсера всегда будет включена идемпотентность «max.in.flight.requests.per.connection» (5) - у производителя всегда будет один запрос в полете на соединение

...