A
DoFnRunners.OutputManager that can buffer its outputs. Uses
PushedBackElementsHandler to buffer the data. Buffering data is necessary because no elements
can be emitted during
snapshotState which is called when the checkpoint barrier already
has been sent downstream. Emitting elements would break the flow of checkpoint barrier and
violate exactly-once semantics.
This buffering can be deactived using FlinkPipelineOptions#setFinishBundleBeforeCheckpointing(true). If activated, we flush out
bundle data before the barrier is sent downstream. This is done via prepareSnapshotPreBarrier. When Flink supports unaligned checkpoints, this should become the
default and this class should be removed as in https://github.com/apache/beam/pull/9652.