@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| 限定符和类型 | 字段和说明 |
|---|---|
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| 构造器和说明 |
|---|
SlicingWindowOperator(SlicingWindowProcessor<W> windowProcessor) |
| 限定符和类型 | 方法和说明 |
|---|---|
void |
close() |
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) |
computeMemorySizefinish, getChainingStrategy, 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, processWatermarkStatus, processWatermarkStatus1, processWatermarkStatus2, reportOrForwardLatencyMarker, setChainingStrategy, setCurrentKey, setKeyContextElement1, setKeyContextElement2, setProcessingTimeService, setup, snapshotState, snapshotStateclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitfinish, getMetricGroup, getOperatorID, initializeState, setKeyContextElement1, setKeyContextElement2, snapshotStateprotected 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 在接口中 org.apache.flink.streaming.api.operators.StreamOperator<org.apache.flink.table.data.RowData>open 在类中 TableStreamOperator<org.apache.flink.table.data.RowData>Exceptionpublic void close()
throws Exception
close 在接口中 org.apache.flink.streaming.api.operators.StreamOperator<org.apache.flink.table.data.RowData>close 在类中 org.apache.flink.streaming.api.operators.AbstractStreamOperator<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 在接口中 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 在接口中 org.apache.flink.streaming.api.operators.Input<org.apache.flink.table.data.RowData>processWatermark 在类中 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 在接口中 org.apache.flink.streaming.api.operators.StreamOperator<org.apache.flink.table.data.RowData>prepareSnapshotPreBarrier 在类中 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.