Class SlicingWindowOperator<K,W>
- java.lang.Object
-
- org.apache.flink.streaming.api.operators.AbstractStreamOperator<OUT>
-
- org.apache.flink.table.runtime.operators.TableStreamOperator<org.apache.flink.table.data.RowData>
-
- org.apache.flink.table.runtime.operators.window.slicing.SlicingWindowOperator<K,W>
-
- All Implemented Interfaces:
Serializable,org.apache.flink.api.common.state.CheckpointListener,org.apache.flink.streaming.api.operators.Input<org.apache.flink.table.data.RowData>,org.apache.flink.streaming.api.operators.KeyContext,org.apache.flink.streaming.api.operators.KeyContextHandler,org.apache.flink.streaming.api.operators.OneInputStreamOperator<org.apache.flink.table.data.RowData,org.apache.flink.table.data.RowData>,org.apache.flink.streaming.api.operators.SetupableStreamOperator<org.apache.flink.table.data.RowData>,org.apache.flink.streaming.api.operators.StreamOperator<org.apache.flink.table.data.RowData>,org.apache.flink.streaming.api.operators.StreamOperatorStateHandler.CheckpointedStreamOperator,org.apache.flink.streaming.api.operators.Triggerable<K,W>
@Internal public final class SlicingWindowOperator<K,W> extends TableStreamOperator<org.apache.flink.table.data.RowData> implements org.apache.flink.streaming.api.operators.OneInputStreamOperator<org.apache.flink.table.data.RowData,org.apache.flink.table.data.RowData>, org.apache.flink.streaming.api.operators.Triggerable<K,W>, org.apache.flink.streaming.api.operators.KeyContext
TheSlicingWindowOperatorimplements an optimized processing for aligned windows which can apply the slicing optimization. The core idea of slicing optimization is to divide all elements from a data stream into a finite number of non-overlapping chunks (a.k.a. slices).Concept of Aligned Window and Unaligned Window
We divide windows into 2 categories: Aligned Windows and Unaligned Windows.
Aligned Windows are windows have predetermined window boundaries and windows can be divided into finite number of non-overlapping chunks. The boundary of an aligned window is determined independently from the time characteristic of the data stream, or messages it receives. For example, hopping (sliding) window is an aligned window as the window boundaries are predetermined based on the window size and slide. Aligned windows include tumbling, hopping, cumulative windows.
Unaligned Windows are windows determined dynamically based on elements. For example, session window is an unaligned window as the window boundaries are determined based on the messages timestamps and their correlations. Currently, unaligned windows include session window only.
Because aligned windows can be divided into finite number of non-overlapping chunks (a.k.a. slices), which can apply efficient processing to share intermediate results.
Concept of Slice
Dividing a window of aligned windows into a finite number of non-overlapping chunks, where the chunks are slices. It has the following properties:
- An element must only belong to a single slice.
- Slices are non-overlapping, i.e. S_i and S_j should not have any shared elements if i != j.
- A window is consist of a finite number of slices.
Abstraction of Slicing Window Operator
A slicing window operator is a simple wrap of
SlicingWindowProcessor. It delegates all the important methods to the underlying processor, where the processor can have different implementation for aggregate and topk or others.A
SlicingWindowProcessorusually leverages theSliceAssignerto assign slices and calculate based on the slices. SeeSliceSharedWindowAggProcessoras an example.Note: since
SlicingWindowProcessorleverages slicing optimization for aligned windows, therefore, it doesn't support unaligned windows, e.g. session window.Note: currently,
SlicingWindowOperatordoesn't support early-fire and late-arrival. Thus late elements (elements belong to emitted windows) will be simply dropped.- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.flink.table.runtime.operators.TableStreamOperator
TableStreamOperator.ContextImpl
-
-
Field Summary
Fields Modifier and Type Field Description protected org.apache.flink.streaming.api.operators.TimestampedCollector<org.apache.flink.table.data.RowData>collectorThis is used for emitting elements with a given timestamp.-
Fields inherited from class org.apache.flink.table.runtime.operators.TableStreamOperator
ctx, currentWatermark
-
-
Constructor Summary
Constructors Constructor Description SlicingWindowOperator(SlicingWindowProcessor<W> windowProcessor)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()org.apache.flink.metrics.CountergetNumLateRecordsDropped()org.apache.flink.metrics.Gauge<Long>getWatermarkLatency()voidinitializeState(org.apache.flink.runtime.state.StateInitializationContext context)voidonEventTime(org.apache.flink.streaming.api.operators.InternalTimer<K,W> timer)voidonProcessingTime(org.apache.flink.streaming.api.operators.InternalTimer<K,W> timer)voidopen()voidprepareSnapshotPreBarrier(long checkpointId)voidprocessElement(org.apache.flink.streaming.runtime.streamrecord.StreamRecord<org.apache.flink.table.data.RowData> element)voidprocessWatermark(org.apache.flink.streaming.api.watermark.Watermark mark)voidsnapshotState(org.apache.flink.runtime.state.StateSnapshotContext context)-
Methods inherited from class org.apache.flink.table.runtime.operators.TableStreamOperator
computeMemorySize
-
Methods inherited from class org.apache.flink.streaming.api.operators.AbstractStreamOperator
finish, getChainingStrategy, getContainingTask, getCurrentKey, getExecutionConfig, getInternalTimerService, getKeyedStateBackend, getKeyedStateStore, getMetricGroup, getOperatorConfig, getOperatorID, getOperatorName, getOperatorStateBackend, getOrCreateKeyedState, getPartitionedState, getPartitionedState, getProcessingTimeService, getRuntimeContext, getTimeServiceManager, getUserCodeClassloader, hasKeyContext1, hasKeyContext2, initializeState, isUsingCustomRawKeyedState, notifyCheckpointAborted, notifyCheckpointComplete, processLatencyMarker, processLatencyMarker1, processLatencyMarker2, processWatermark1, processWatermark2, processWatermarkStatus, processWatermarkStatus1, processWatermarkStatus2, reportOrForwardLatencyMarker, setChainingStrategy, setCurrentKey, setKeyContextElement1, setKeyContextElement2, setProcessingTimeService, setup, snapshotState
-
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.api.common.state.CheckpointListener
notifyCheckpointAborted, notifyCheckpointComplete
-
Methods inherited from interface org.apache.flink.streaming.api.operators.Input
processLatencyMarker, 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
-
-
-
-
Constructor Detail
-
SlicingWindowOperator
public SlicingWindowOperator(SlicingWindowProcessor<W> windowProcessor)
-
-
Method Detail
-
open
public void open() throws Exception- Specified by:
openin interfaceorg.apache.flink.streaming.api.operators.StreamOperator<K>- Overrides:
openin classTableStreamOperator<org.apache.flink.table.data.RowData>- Throws:
Exception
-
initializeState
public void initializeState(org.apache.flink.runtime.state.StateInitializationContext context) throws Exception- Specified by:
initializeStatein interfaceorg.apache.flink.streaming.api.operators.StreamOperatorStateHandler.CheckpointedStreamOperator- Overrides:
initializeStatein classorg.apache.flink.streaming.api.operators.AbstractStreamOperator<org.apache.flink.table.data.RowData>- Throws:
Exception
-
snapshotState
public void snapshotState(org.apache.flink.runtime.state.StateSnapshotContext context) throws Exception- Specified by:
snapshotStatein interfaceorg.apache.flink.streaming.api.operators.StreamOperatorStateHandler.CheckpointedStreamOperator- Overrides:
snapshotStatein classorg.apache.flink.streaming.api.operators.AbstractStreamOperator<org.apache.flink.table.data.RowData>- Throws:
Exception
-
close
public void close() throws Exception
-
processElement
public void processElement(org.apache.flink.streaming.runtime.streamrecord.StreamRecord<org.apache.flink.table.data.RowData> element) throws Exception
-
processWatermark
public void processWatermark(org.apache.flink.streaming.api.watermark.Watermark mark) throws Exception- Specified by:
processWatermarkin interfaceorg.apache.flink.streaming.api.operators.Input<K>- Overrides:
processWatermarkin classTableStreamOperator<org.apache.flink.table.data.RowData>- Throws:
Exception
-
onEventTime
public void onEventTime(org.apache.flink.streaming.api.operators.InternalTimer<K,W> timer) throws Exception
-
onProcessingTime
public void onProcessingTime(org.apache.flink.streaming.api.operators.InternalTimer<K,W> timer) throws Exception
-
prepareSnapshotPreBarrier
public void prepareSnapshotPreBarrier(long checkpointId) throws Exception
-
getNumLateRecordsDropped
@VisibleForTesting public org.apache.flink.metrics.Counter getNumLateRecordsDropped()
-
getWatermarkLatency
@VisibleForTesting public org.apache.flink.metrics.Gauge<Long> getWatermarkLatency()
-
-