Class StatusWatermarkValve
java.lang.Object
org.apache.flink.streaming.runtime.watermarkstatus.StatusWatermarkValve
- Direct Known Subclasses:
EventTimeWatermarkCombiner
A
StatusWatermarkValve embodies the logic of how Watermark and WatermarkStatus are propagated to downstream outputs, given a set of one or multiple
subpartitions that continuously receive them. Usages of this class need to define the number of
subpartitions that the valve needs to handle, as well as provide a implementation of PushingAsyncDataInput.DataOutput, which is called by the valve only when it determines a new watermark or watermark
status can be propagated.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classAnSubpartitionStatuskeeps track of a subpartition's last watermark, stream status, and whether or not the subpartition's current watermark is aligned with the overall watermark output from the valve. -
Constructor Summary
ConstructorsConstructorDescriptionStatusWatermarkValve(int numInputChannels) Returns a newStatusWatermarkValve.StatusWatermarkValve(ResultSubpartitionIndexSet[] subpartitionIndexSets) StatusWatermarkValve(CheckpointedInputGate inputGate) -
Method Summary
Modifier and TypeMethodDescriptionprotected StatusWatermarkValve.SubpartitionStatusgetSubpartitionStatus(int subpartitionIndex) voidinputWatermark(Watermark watermark, int channelIndex, PushingAsyncDataInput.DataOutput<?> output) Feed aWatermarkinto the valve.voidinputWatermarkStatus(WatermarkStatus watermarkStatus, int channelIndex, PushingAsyncDataInput.DataOutput<?> output) Feed aWatermarkStatusinto the valve.
-
Constructor Details
-
StatusWatermarkValve
@VisibleForTesting public StatusWatermarkValve(int numInputChannels) Returns a newStatusWatermarkValve.- Parameters:
numInputChannels- the number of input channels that this valve will need to handle
-
StatusWatermarkValve
-
StatusWatermarkValve
-
-
Method Details
-
inputWatermark
public void inputWatermark(Watermark watermark, int channelIndex, PushingAsyncDataInput.DataOutput<?> output) throws Exception Feed aWatermarkinto the valve. If the input triggers the valve to output a new Watermark,PushingAsyncDataInput.DataOutput.emitWatermark(Watermark)will be called to process the new Watermark.- Parameters:
watermark- the watermark to feed to the valvechannelIndex- the index of the channel that the fed watermark belongs to (index starting from 0)- Throws:
Exception
-
inputWatermarkStatus
public void inputWatermarkStatus(WatermarkStatus watermarkStatus, int channelIndex, PushingAsyncDataInput.DataOutput<?> output) throws Exception Feed aWatermarkStatusinto the valve. This may trigger the valve to output either a new Watermark Status, for whichPushingAsyncDataInput.DataOutput.emitWatermarkStatus(WatermarkStatus)will be called, or a new Watermark, for whichPushingAsyncDataInput.DataOutput.emitWatermark(Watermark)will be called.- Parameters:
watermarkStatus- the watermark status to feed to the valvechannelIndex- the index of the channel that the fed watermark status belongs to (index starting from 0)- Throws:
Exception
-
getSubpartitionStatus
@VisibleForTesting protected StatusWatermarkValve.SubpartitionStatus getSubpartitionStatus(int subpartitionIndex)
-