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
StreamTaskuses StreamTask.initializeTransactions when created and requested to resume