From 8078642eaa098518fbe65fa4b36823f054fe90f8 Mon Sep 17 00:00:00 2001 From: Liu Jicong Date: Mon, 22 Aug 2022 09:14:55 +0800 Subject: [PATCH] docs(stream) --- docs/zh/12-taos-sql/14-stream.md | 21 +++++++++++++++++++-- docs/zh/12-taos-sql/watermark.webp | Bin 0 -> 17808 bytes 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 docs/zh/12-taos-sql/watermark.webp 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 0000000000000000000000000000000000000000..3307faccffdaaec6dddf5cad8b7c11016fd28bd4 GIT binary patch literal 17808 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 literal 0 HcmV?d00001