Exactly-Once Support (EOS)
Exactly-Once Support (EOS) (aka Exactly-Once Processing Guarantee) is…FIXME
StreamsConfig
defines eosEnabled internal flag that is enabled (true
) when StreamsConfig.PROCESSING_GUARANTEE_CONFIG is StreamsConfig.EXACTLY_ONCE (exactly_once
).
StreamsConfig.PROCESSING_GUARANTEE_CONFIG can be one of the two values:
-
AT_LEAST_ONCE (default)
With EOS enabled, the frequency with which to save the position of a processor (StreamsConfig.COMMIT_INTERVAL_MS_CONFIG) is always 100L
.
Exactly-once processing requires a cluster of at least three brokers (by default) what is the recommended setting for production. For development you can change this, by adjusting broker setting transaction.state.log.replication.factor
and transaction.state.log.min.isr
.
Notes
-
Committing and suspending StreamTasks are sensitive to EOS (per eosEnabled flag)
-
With Exactly-once support enabled
StreamTask
uses StreamTask.initializeTransactions when created and requested to resume