Class AsyncWindowOperator<K,IN,ACC,OUT,W extends Window>
- java.lang.Object
-
- org.apache.flink.streaming.api.operators.AbstractStreamOperator<OUT>
-
- org.apache.flink.runtime.asyncprocessing.operators.AbstractAsyncKeyOrderedStreamOperator<OUT>
-
- org.apache.flink.runtime.asyncprocessing.operators.AbstractAsyncStateStreamOperator<OUT>
-
- org.apache.flink.runtime.asyncprocessing.operators.AbstractAsyncStateUdfStreamOperator<OUT,InternalAsyncWindowFunction<ACC,OUT,K,W>>
-
- org.apache.flink.runtime.asyncprocessing.operators.windowing.AsyncWindowOperator<K,IN,ACC,OUT,W>
-
- Type Parameters:
K- The type of key returned by theKeySelector.IN- The type of the incoming elements.OUT- The type of elements emitted by theInternalWindowFunction.W- The type ofWindowthat theWindowAssignerassigns.
- All Implemented Interfaces:
Serializable,org.apache.flink.api.common.state.CheckpointListener,Input<IN>,KeyContext,KeyContextHandler,OneInputStreamOperator<IN,OUT>,org.apache.flink.streaming.api.operators.OutputTypeConfigurable<OUT>,StreamOperator<OUT>,StreamOperatorStateHandler.CheckpointedStreamOperator,Triggerable<K,W>,UserFunctionProvider<InternalAsyncWindowFunction<ACC,OUT,K,W>>,YieldingOperator<OUT>,AsyncKeyOrderedProcessing,AsyncKeyOrderedProcessingOperator
- Direct Known Subclasses:
AsyncEvictingWindowOperator
@Internal public class AsyncWindowOperator<K,IN,ACC,OUT,W extends Window> extends AbstractAsyncStateUdfStreamOperator<OUT,InternalAsyncWindowFunction<ACC,OUT,K,W>> implements OneInputStreamOperator<IN,OUT>, Triggerable<K,W>
An operator that implements the logic for windowing based on aWindowAssignerandAsyncTrigger. This is the async state access version of WindowOperator.When an element arrives it gets assigned a key using a
KeySelectorand it gets assigned to zero or more windows using aWindowAssigner. Based on this, the element is put into panes. A pane is the bucket of elements that have the same key and sameWindow. An element can be in multiple panes if it was assigned to multiple windows by theWindowAssigner.Each pane gets its own instance of the provided
Trigger. This trigger determines when the contents of the pane should be processed to emit results. When a trigger fires, the givenInternalWindowFunctionis invoked to produce the results that are emitted for the pane to which theTriggerbelongs.- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description classAsyncWindowOperator.AbstractPerWindowStateStoreBase class for per-windowKeyedStateStores.classAsyncWindowOperator.ContextContextis a utility for handlingAsyncTriggerinvocations.classAsyncWindowOperator.PerWindowStateStoreRegular per-window state store for use withProcessWindowFunction.classAsyncWindowOperator.WindowContextA utility class for handlingProcessWindowFunctioninvocations.
-
Field Summary
Fields Modifier and Type Field Description protected longallowedLatenessThe allowed lateness for elements.protected InternalTimerService<W>internalTimerServiceprotected org.apache.flink.api.common.typeutils.TypeSerializer<K>keySerializerFor serializing the key in checkpoints.protected org.apache.flink.util.OutputTag<IN>lateDataOutputTagOutputTagto use for late arriving events.protected org.apache.flink.metrics.CounternumLateRecordsDroppedprotected AsyncWindowOperator.WindowContextprocessContextprotected TimestampedCollectorWithDeclaredVariable<OUT>timestampedCollectorThis is given to theInternalWindowFunctionfor emitting elements with a given timestamp.protected AsyncWindowOperator.ContexttriggerContextprotected WindowAssigner<? super IN,W>windowAssignerprotected WindowAssigner.WindowAssignerContextwindowAssignerContextprotected DeclaredVariable<W>windowDeclaredVariableprotected org.apache.flink.api.common.typeutils.TypeSerializer<W>windowSerializerFor serializing the window in checkpoints.-
Fields inherited from class org.apache.flink.runtime.asyncprocessing.operators.AbstractAsyncStateUdfStreamOperator
declarationContext, userFunction
-
Fields inherited from class org.apache.flink.runtime.asyncprocessing.operators.AbstractAsyncKeyOrderedStreamOperator
asyncExecutionController, currentProcessingContext, declarationManager, environment
-
Fields inherited from class org.apache.flink.streaming.api.operators.AbstractStreamOperator
combinedWatermark, config, lastRecordAttributes1, lastRecordAttributes2, latencyStats, metrics, output, processingTimeService, stateHandler, stateKeySelector1, stateKeySelector2, timeServiceManager
-
-
Constructor Summary
Constructors Constructor Description AsyncWindowOperator(WindowAssigner<? super IN,W> windowAssigner, org.apache.flink.api.common.typeutils.TypeSerializer<W> windowSerializer, org.apache.flink.api.java.functions.KeySelector<IN,K> keySelector, org.apache.flink.api.common.typeutils.TypeSerializer<K> keySerializer, org.apache.flink.api.common.state.v2.StateDescriptor<?> windowStateDescriptor, InternalAsyncWindowFunction<ACC,OUT,K,W> windowFunction, AsyncTrigger<? super IN,? super W> trigger, long allowedLateness, org.apache.flink.util.OutputTag<IN> lateDataOutputTag)Creates a newWindowOperatorbased on the given policies and user functions.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()This method is called at the very end of the operator's life, both in the case of a successful completion of the operation, and in the case of a failure and canceling.protected voiddeleteCleanupTimer(W window)Deletes the cleanup timer set for the contents of the provided window.org.apache.flink.api.java.functions.KeySelector<IN,K>getKeySelector()OperatorAttributesgetOperatorAttributes()Called to get the OperatorAttributes of the operator.AsyncWindowOperator.WindowContextgetProcessContext()org.apache.flink.api.common.state.v2.StateDescriptor<?>getStateDescriptor()AsyncTrigger<? super IN,? super W>getTrigger()WindowAssigner<? super IN,W>getWindowAssigner()WindowAssigner.WindowAssignerContextgetWindowAssignerContext()protected booleanisCleanupTime(W window, long time)Returnstrueif the given time is the cleanup time for the given window.protected booleanisElementLate(StreamRecord<IN> element)Decide if a record is currently late, based on current watermark and allowed lateness.protected booleanisWindowLate(W window)Returnstrueif the watermark is after the end timestamp plus the allowed lateness of the given window.voidonEventTime(InternalTimer<K,W> timer)Invoked when an event-time timer fires.voidonProcessingTime(InternalTimer<K,W> timer)Invoked when a processing-time timer fires.voidopen()This method is called immediately before any elements are processed, it should contain the operator's initialization logic, e.g. state initialization.voidprocessElement(StreamRecord<IN> element)Processes one element that arrived on this input of theMultipleInputStreamOperator.protected voidregisterCleanupTimer(W window)Registers a timer to cleanup the content of the window.voidsetup(StreamTask<?,?> containingTask, StreamConfig config, Output<StreamRecord<OUT>> output)protected voidsideOutput(StreamRecord<IN> element)Write skipped late arriving element to SideOutput.-
Methods inherited from class org.apache.flink.runtime.asyncprocessing.operators.AbstractAsyncStateUdfStreamOperator
finish, getUserFunction, initializeState, notifyCheckpointAborted, notifyCheckpointComplete, setOutputType, snapshotState
-
Methods inherited from class org.apache.flink.runtime.asyncprocessing.operators.AbstractAsyncStateStreamOperator
createAsyncExecutionController, getKeySelectorForAsyncKeyedContext
-
Methods inherited from class org.apache.flink.runtime.asyncprocessing.operators.AbstractAsyncKeyOrderedStreamOperator
asyncProcessWithKey, beforeInitializeStateHandler, drainStateRequests, getAsyncKeyedStateBackend, getCurrentKey, getDeclarationManager, getElementOrder, getInternalTimerService, getOrCreateKeyedState, getRecordProcessor, handleAsyncException, isAsyncKeyOrderedProcessingEnabled, newKeySelected, postProcessElement, postProcessWatermark, prepareSnapshotPreBarrier, preProcessWatermark, preserveRecordOrderAndProcess, processNonRecord, processRecordAttributes, processRecordAttributes1, processRecordAttributes2, processWatermark, processWatermark, processWatermark1, processWatermark1Internal, processWatermark2, processWatermark2Internal, processWatermarkInternal, processWatermarkStatus, processWatermarkStatus, reportOrForwardLatencyMarker, setAsyncKeyedContextElement, setKeyContextElement1, setKeyContextElement2
-
Methods inherited from class org.apache.flink.streaming.api.operators.AbstractStreamOperator
getContainingTask, getExecutionConfig, getKeyedStateBackend, getKeyedStateStore, getMetricGroup, getOperatorConfig, getOperatorID, getOperatorName, getOperatorStateBackend, getOrCreateKeyedState, getPartitionedState, getPartitionedState, getProcessingTimeService, getRuntimeContext, getStateKeySelector1, getStateKeySelector2, getTimeServiceManager, getUserCodeClassloader, hasKeyContext1, hasKeyContext2, initializeState, isUsingCustomRawKeyedState, processLatencyMarker, processLatencyMarker1, processLatencyMarker2, processWatermark1, processWatermark2, processWatermarkStatus1, processWatermarkStatus2, setCurrentKey, setMailboxExecutor, setProcessingTimeService, snapshotState, useSplittableTimers
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.flink.streaming.runtime.operators.asyncprocessing.AsyncKeyOrderedProcessing
getRecordProcessor, isAsyncKeyOrderedProcessingEnabled
-
Methods inherited from interface org.apache.flink.streaming.runtime.operators.asyncprocessing.AsyncKeyOrderedProcessingOperator
asyncProcessWithKey, getDeclarationManager, getElementOrder, postProcessElement, preserveRecordOrderAndProcess, setAsyncKeyedContextElement
-
Methods inherited from interface org.apache.flink.api.common.state.CheckpointListener
notifyCheckpointAborted, notifyCheckpointComplete
-
Methods inherited from interface org.apache.flink.streaming.api.operators.Input
processLatencyMarker, processRecordAttributes, processWatermark, processWatermark, processWatermarkStatus
-
Methods inherited from interface org.apache.flink.streaming.api.operators.KeyContext
getCurrentKey, setCurrentKey
-
Methods inherited from interface org.apache.flink.streaming.api.operators.KeyContextHandler
hasKeyContext
-
Methods inherited from interface org.apache.flink.streaming.api.operators.OneInputStreamOperator
setKeyContextElement
-
Methods inherited from interface org.apache.flink.streaming.api.operators.StreamOperator
finish, getMetricGroup, getOperatorID, initializeState, prepareSnapshotPreBarrier, setKeyContextElement1, setKeyContextElement2, snapshotState
-
-
-
-
Field Detail
-
windowAssigner
protected final WindowAssigner<? super IN,W extends Window> windowAssigner
-
keySerializer
protected final org.apache.flink.api.common.typeutils.TypeSerializer<K> keySerializer
For serializing the key in checkpoints.
-
windowSerializer
protected final org.apache.flink.api.common.typeutils.TypeSerializer<W extends Window> windowSerializer
For serializing the window in checkpoints.
-
allowedLateness
protected final long allowedLateness
The allowed lateness for elements. This is used for:- Deciding if an element should be dropped from a window due to lateness.
- Clearing the state of a window if the system time passes the
window.maxTimestamp + allowedLatenesslandmark.
-
lateDataOutputTag
protected final org.apache.flink.util.OutputTag<IN> lateDataOutputTag
OutputTagto use for late arriving events. Elements for whichwindow.maxTimestamp + allowedLatenessis smaller than the current watermark will be emitted to this.
-
numLateRecordsDropped
protected transient org.apache.flink.metrics.Counter numLateRecordsDropped
-
timestampedCollector
protected transient TimestampedCollectorWithDeclaredVariable<OUT> timestampedCollector
This is given to theInternalWindowFunctionfor emitting elements with a given timestamp.
-
triggerContext
protected transient AsyncWindowOperator.Context triggerContext
-
processContext
protected transient AsyncWindowOperator.WindowContext processContext
-
windowDeclaredVariable
protected transient DeclaredVariable<W extends Window> windowDeclaredVariable
-
windowAssignerContext
protected transient WindowAssigner.WindowAssignerContext windowAssignerContext
-
internalTimerService
protected transient InternalTimerService<W extends Window> internalTimerService
-
-
Constructor Detail
-
AsyncWindowOperator
public AsyncWindowOperator(WindowAssigner<? super IN,W> windowAssigner, org.apache.flink.api.common.typeutils.TypeSerializer<W> windowSerializer, org.apache.flink.api.java.functions.KeySelector<IN,K> keySelector, org.apache.flink.api.common.typeutils.TypeSerializer<K> keySerializer, org.apache.flink.api.common.state.v2.StateDescriptor<?> windowStateDescriptor, InternalAsyncWindowFunction<ACC,OUT,K,W> windowFunction, AsyncTrigger<? super IN,? super W> trigger, long allowedLateness, org.apache.flink.util.OutputTag<IN> lateDataOutputTag)
Creates a newWindowOperatorbased on the given policies and user functions.
-
-
Method Detail
-
setup
public void setup(StreamTask<?,?> containingTask, StreamConfig config, Output<StreamRecord<OUT>> output)
- Overrides:
setupin classAbstractAsyncStateUdfStreamOperator<OUT,InternalAsyncWindowFunction<ACC,OUT,K,W extends Window>>
-
open
public void open() throws ExceptionDescription copied from class:AbstractStreamOperatorThis method is called immediately before any elements are processed, it should contain the operator's initialization logic, e.g. state initialization.The default implementation does nothing.
- Specified by:
openin interfaceStreamOperator<K>- Overrides:
openin classAbstractAsyncStateUdfStreamOperator<OUT,InternalAsyncWindowFunction<ACC,OUT,K,W extends Window>>- Throws:
Exception- An exception in this method causes the operator to fail.
-
close
public void close() throws ExceptionDescription copied from interface:StreamOperatorThis method is called at the very end of the operator's life, both in the case of a successful completion of the operation, and in the case of a failure and canceling.This method is expected to make a thorough effort to release all resources that the operator has acquired.
NOTE:It can not emit any records! If you need to emit records at the end of processing, do so in the
StreamOperator.finish()method.- Specified by:
closein interfaceStreamOperator<K>- Overrides:
closein classAbstractAsyncStateUdfStreamOperator<OUT,InternalAsyncWindowFunction<ACC,OUT,K,W extends Window>>- Throws:
Exception
-
processElement
public void processElement(StreamRecord<IN> element) throws Exception
Description copied from interface:InputProcesses one element that arrived on this input of theMultipleInputStreamOperator. This method is guaranteed to not be called concurrently with other methods of the operator.- Specified by:
processElementin interfaceInput<K>- Throws:
Exception
-
onEventTime
public void onEventTime(InternalTimer<K,W> timer) throws Exception
Description copied from interface:TriggerableInvoked when an event-time timer fires.- Specified by:
onEventTimein interfaceTriggerable<K,IN>- Throws:
Exception
-
onProcessingTime
public void onProcessingTime(InternalTimer<K,W> timer) throws Exception
Description copied from interface:TriggerableInvoked when a processing-time timer fires.- Specified by:
onProcessingTimein interfaceTriggerable<K,IN>- Throws:
Exception
-
getOperatorAttributes
public OperatorAttributes getOperatorAttributes()
Description copied from interface:StreamOperatorCalled to get the OperatorAttributes of the operator. If there is no defined attribute, a default OperatorAttributes is built.- Specified by:
getOperatorAttributesin interfaceStreamOperator<K>- Returns:
- OperatorAttributes of the operator.
-
sideOutput
protected void sideOutput(StreamRecord<IN> element)
Write skipped late arriving element to SideOutput.- Parameters:
element- skipped late arriving element to side output
-
isWindowLate
protected boolean isWindowLate(W window)
Returnstrueif the watermark is after the end timestamp plus the allowed lateness of the given window.
-
isElementLate
protected boolean isElementLate(StreamRecord<IN> element)
Decide if a record is currently late, based on current watermark and allowed lateness.- Parameters:
element- The element to check- Returns:
- The element for which should be considered when sideoutputs
-
registerCleanupTimer
protected void registerCleanupTimer(W window)
Registers a timer to cleanup the content of the window.- Parameters:
window- the window whose state to discard
-
deleteCleanupTimer
protected void deleteCleanupTimer(W window)
Deletes the cleanup timer set for the contents of the provided window.- Parameters:
window- the window whose state to discard
-
isCleanupTime
protected final boolean isCleanupTime(W window, long time)
Returnstrueif the given time is the cleanup time for the given window.
-
getTrigger
@VisibleForTesting public AsyncTrigger<? super IN,? super W> getTrigger()
-
getKeySelector
@VisibleForTesting public org.apache.flink.api.java.functions.KeySelector<IN,K> getKeySelector()
-
getWindowAssigner
@VisibleForTesting public WindowAssigner<? super IN,W> getWindowAssigner()
-
getStateDescriptor
@VisibleForTesting public org.apache.flink.api.common.state.v2.StateDescriptor<?> getStateDescriptor()
-
getProcessContext
@VisibleForTesting public AsyncWindowOperator.WindowContext getProcessContext()
-
getWindowAssignerContext
@VisibleForTesting public WindowAssigner.WindowAssignerContext getWindowAssignerContext()
-
-