@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
SlicingWindowOperator implements 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).
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.
Dividing a window of aligned windows into a finite number of non-overlapping chunks, where the chunks are slices. It has the following properties:
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 SlicingWindowProcessor usually leverages the SliceAssigner to assign slices
and calculate based on the slices. See SliceSharedWindowAggProcessor as an example.
Note: since SlicingWindowProcessor leverages slicing optimization for aligned windows,
therefore, it doesn't support unaligned windows, e.g. session window.
Note: currently, SlicingWindowOperator doesn't support early-fire and late-arrival.
Thus late elements (elements belong to emitted windows) will be simply dropped.
TableStreamOperator.ContextImpl| Modifier and Type | Field and Description |
|---|---|
protected org.apache.flink.streaming.api.operators.TimestampedCollector<org.apache.flink.table.data.RowData> |
collector
This is used for emitting elements with a given timestamp.
|
ctx, currentWatermark| Constructor and Description |
|---|
SlicingWindowOperator(SlicingWindowProcessor<W> windowProcessor) |
| Modifier and Type | Method and Description |
|---|---|
void |
close() |
void |
dispose() |
org.apache.flink.metrics.Counter |
getNumLateRecordsDropped() |
org.apache.flink.metrics.Gauge<Long> |
getWatermarkLatency() |
void |
onEventTime(org.apache.flink.streaming.api.operators.InternalTimer<K,W> timer) |
void |
onProcessingTime(org.apache.flink.streaming.api.operators.InternalTimer<K,W> timer) |
void |
open() |
void |
prepareSnapshotPreBarrier(long checkpointId) |
void |
processElement(org.apache.flink.streaming.runtime.streamrecord.StreamRecord<org.apache.flink.table.data.RowData> element) |
void |
processWatermark(org.apache.flink.streaming.api.watermark.Watermark mark) |
computeMemorySizegetChainingStrategy, getContainingTask, getCurrentKey, getExecutionConfig, getInternalTimerService, getKeyedStateBackend, getKeyedStateStore, getMetricGroup, getOperatorConfig, getOperatorID, getOperatorName, getOperatorStateBackend, getOrCreateKeyedState, getPartitionedState, getPartitionedState, getProcessingTimeService, getRuntimeContext, getTimeServiceManager, getUserCodeClassloader, initializeState, initializeState, isUsingCustomRawKeyedState, notifyCheckpointAborted, notifyCheckpointComplete, processLatencyMarker, processLatencyMarker1, processLatencyMarker2, processWatermark1, processWatermark2, reportOrForwardLatencyMarker, setChainingStrategy, setCurrentKey, setKeyContextElement1, setKeyContextElement2, setProcessingTimeService, setup, snapshotState, snapshotStateclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitsetKeyContextElementgetMetricGroup, getOperatorID, initializeState, setKeyContextElement1, setKeyContextElement2, snapshotStatenotifyCheckpointAborted, notifyCheckpointCompleteprotected transient org.apache.flink.streaming.api.operators.TimestampedCollector<org.apache.flink.table.data.RowData> collector
public SlicingWindowOperator(SlicingWindowProcessor<W> windowProcessor)
public void open()
throws Exception
open in interface org.apache.flink.streaming.api.operators.StreamOperator<org.apache.flink.table.data.RowData>open in class TableStreamOperator<org.apache.flink.table.data.RowData>Exceptionpublic void close()
throws Exception
close in interface org.apache.flink.streaming.api.operators.StreamOperator<org.apache.flink.table.data.RowData>close in class TableStreamOperator<org.apache.flink.table.data.RowData>Exceptionpublic void dispose()
throws Exception
dispose in interface org.apache.flink.streaming.api.operators.StreamOperator<org.apache.flink.table.data.RowData>dispose in interface org.apache.flink.util.Disposabledispose in class TableStreamOperator<org.apache.flink.table.data.RowData>Exceptionpublic void processElement(org.apache.flink.streaming.runtime.streamrecord.StreamRecord<org.apache.flink.table.data.RowData> element)
throws Exception
processElement in interface org.apache.flink.streaming.api.operators.Input<org.apache.flink.table.data.RowData>Exceptionpublic void processWatermark(org.apache.flink.streaming.api.watermark.Watermark mark)
throws Exception
processWatermark in interface org.apache.flink.streaming.api.operators.Input<org.apache.flink.table.data.RowData>processWatermark in class TableStreamOperator<org.apache.flink.table.data.RowData>Exceptionpublic void onEventTime(org.apache.flink.streaming.api.operators.InternalTimer<K,W> timer) throws Exception
public void onProcessingTime(org.apache.flink.streaming.api.operators.InternalTimer<K,W> timer) throws Exception
public void prepareSnapshotPreBarrier(long checkpointId)
throws Exception
prepareSnapshotPreBarrier in interface org.apache.flink.streaming.api.operators.StreamOperator<org.apache.flink.table.data.RowData>prepareSnapshotPreBarrier in class org.apache.flink.streaming.api.operators.AbstractStreamOperator<org.apache.flink.table.data.RowData>Exception@VisibleForTesting public org.apache.flink.metrics.Counter getNumLateRecordsDropped()
@VisibleForTesting public org.apache.flink.metrics.Gauge<Long> getWatermarkLatency()
Copyright © 2014–2022 The Apache Software Foundation. All rights reserved.