diff --git a/docs/zh/12-taos-sql/14-stream.md b/docs/zh/12-taos-sql/14-stream.md index 94f34ea1ff..24e695bcdc 100644 --- a/docs/zh/12-taos-sql/14-stream.md +++ b/docs/zh/12-taos-sql/14-stream.md @@ -92,9 +92,9 @@ SELECT * from performance_schema.`perf_streams`; MAX_DELAY 模式在窗口关闭时会立即触发计算。此外,当数据写入后,计算触发的时间超过 max delay 指定的时间,则立即触发计算 -## 流式计算的乱序数据容忍策略 +## 流式计算的窗口关闭 -在创建流时,可以在 stream_option 中指定 watermark。 +在创建流时,可以在 stream_option 中指定 watermark,它定义了数据乱序的容忍上界。 流式计算通过 watermark 来度量对乱序数据的容忍程度,watermark 默认为 0。 @@ -102,6 +102,23 @@ T = 最新事件时间 - watermark 每次写入的数据都会以上述公式更新窗口关闭时间,并将窗口结束时间 < T 的所有打开的窗口关闭,若触发模式为 WINDOW_CLOSE 或 MAX_DELAY,则推送窗口聚合结果。 + +![TDengine 流式计算窗口关闭示意图](./watermark.webp) + + +图中,纵轴表示不同时刻,对于不同时刻,我们画出其对应的 TDengine 收到的数据,即为横轴。 + +横轴上的数据点表示已经收到的数据,其中蓝色的点表示事件时间(即数据中的时间戳主键)最后的数据,该数据点减去定义的 watermark 时间,得到乱序容忍的上界 T。 + +所有结束时间小于 T 的窗口都将被关闭(图中以灰色方框标记)。 + +T2 时刻,乱序数据(黄色的点)到达 TDengine,由于有 watermark 的存在,这些数据进入的窗口并未被关闭,因此可以被正确处理。 + +T3 时刻,最新事件到达,T 向后推移超过了第二个窗口关闭的时间,该窗口被关闭,乱序数据被正确处理。 + +在 window_close 或 max_delay 模式下,窗口关闭直接影响推送结果。在 at_once 模式下,窗口关闭只与内存占用有关。 + + ## 流式计算的过期数据处理策略 对于已关闭的窗口,再次落入该窗口中的数据被标记为过期数据. diff --git a/docs/zh/12-taos-sql/watermark.webp b/docs/zh/12-taos-sql/watermark.webp new file mode 100644 index 0000000000..3307faccff Binary files /dev/null and b/docs/zh/12-taos-sql/watermark.webp differ