網(wǎng)站首頁 編程語言 正文
我們都知道,F(xiàn)link的核心是流式處理,但同時(shí)也支持批處理,F(xiàn)link底層是一個(gè)流式引擎,在這個(gè)上面實(shí)現(xiàn)了流處理和批處理,而窗口則是批處理的實(shí)現(xiàn)。
在Flink中window從大的分類上主要有三種:Time Window(根據(jù)時(shí)間)、Count Window(根據(jù)數(shù)據(jù)量)、Session Window(會(huì)話窗口)
窗口類型有如下兩種:
- Tumbling Window 滾動(dòng)窗口,窗口之間的數(shù)據(jù)沒有重疊
- Sliding Window 滑動(dòng)窗口,窗口之間的數(shù)據(jù)有可能重疊
Count Window
Count Window主要有兩類:
- Tumble Count Window:累積固定個(gè)數(shù)的數(shù)據(jù)就作為一個(gè)窗口,按照數(shù)據(jù)量來統(tǒng)計(jì),不是按照時(shí)間,比如countWindow(100) 表示當(dāng)窗口中的數(shù)據(jù)有100個(gè)的時(shí)候開始計(jì)算
- Sliding Count Window: 累積固定個(gè)數(shù)的數(shù)據(jù)就作為一個(gè)窗口,超過指定數(shù)量個(gè)數(shù)數(shù)據(jù)開啟新一個(gè)窗口計(jì)算,比如 coutnWindow(100,10)窗口大小是100,滑動(dòng)間隔是10,每增加10個(gè)元素就會(huì)對(duì)前面的100個(gè)元素計(jì)算一次
Time Window
Time Window是根據(jù)時(shí)間對(duì)數(shù)據(jù)進(jìn)行分組的,
- Tumble Time Window: 在時(shí)間上按照給定的窗口大小切分窗口,窗口之間不會(huì)重疊
- Sliding Time Window: 在時(shí)間上按照給定的窗口大小、滑動(dòng)步長切分窗口,窗口之間可能會(huì)存在數(shù)據(jù)重疊
Session Window
session window意為會(huì)話窗口,與HTTP請(qǐng)求的session概念類似,當(dāng)超過一段時(shí)間,窗口沒有收到數(shù)據(jù)時(shí),認(rèn)為窗口結(jié)束,計(jì)算窗口內(nèi)的數(shù)據(jù),窗口之間數(shù)據(jù)不會(huì)重疊
對(duì)于TimeWindow,在Flink中有幾個(gè)時(shí)間語義:
Flink中主要有如下三種時(shí)間語義:
- Event Time ,數(shù)據(jù)自帶的時(shí)間屬性,使用這個(gè)語義時(shí)需要指定數(shù)據(jù)中哪個(gè)字段表示該時(shí)間同事必須設(shè)置WaterMark。使用Event Time時(shí),數(shù)據(jù)可能是亂序的。在計(jì)算時(shí),F(xiàn)link會(huì)緩存窗口內(nèi)的數(shù)據(jù)直到接收到WaterMark,WaterMark假設(shè)不會(huì)有更晚的數(shù)據(jù)到達(dá),意味著在同一個(gè)時(shí)間窗口下,F(xiàn)link會(huì)等待一個(gè)有限的時(shí)間,在一定程度上降低了計(jì)算結(jié)果的絕對(duì)準(zhǔn)確性,并且增加了系統(tǒng)的延遲
- Processing Time: 數(shù)據(jù)進(jìn)入某個(gè)算子,算子開始執(zhí)行時(shí)的系統(tǒng)時(shí)間,不需要WaterMark機(jī)制,只依賴當(dāng)前節(jié)點(diǎn)的操作系統(tǒng)時(shí)間
- Ingestion Time: 數(shù)據(jù)到達(dá)Flink Source的時(shí)間,從Source到下游的各個(gè)算子中可能有多個(gè)計(jì)算環(huán)節(jié),任何一個(gè)算子處理速度的快慢可能影響下游算子的Processing Time,而 Ingestion Time定義的是數(shù)據(jù)流入Flink的時(shí)間,不會(huì)被下游算子處理速度影響,因此Ingestion Time通常是Event Time和Processing Time的一個(gè)折中方案,Ingestion Time不需要設(shè)置復(fù)Water Mark,也不需要太多緩存,延遲較低。
watermark水印
watermark一般是在Event Time語義下使用,我們知道,Event Time 是事件發(fā)生的時(shí)間,但是進(jìn)入到Flink中并不一定按照EventTime順序進(jìn)入,導(dǎo)致窗口收到的時(shí)間會(huì)存在亂序問題,這種情況下,數(shù)據(jù)可能出現(xiàn)亂序和延遲情況,而WaterMark就是為了解決這個(gè)問題。
我們假設(shè)窗口為滾動(dòng)窗口,窗口大小為1分鐘,正常情況下,窗口如下:
窗口1 : [20212-08 08:00:00 , 20212-08 08:01:00)
窗口2: [20212-08 08:01:00 , 20212-08 08:02:00)
窗口3: [20212-08 08:02:00 , 20212-08 08:03:00)
如果有一條數(shù)據(jù)的時(shí)間時(shí)間為 20212-08 08:00:30 在 20212-08 08:01:15到達(dá),這個(gè)時(shí)候窗口1在20212-08 08:01:00已經(jīng)處理完了,按照正常情況下,這條數(shù)據(jù)會(huì)被丟棄。
采用WaterMark機(jī)制之后,比如設(shè)置MaterMark為延遲20秒,那么這時(shí)候窗口1要在 20212-08 08:01:20的是才會(huì)觸發(fā)計(jì)算,相當(dāng)于這個(gè)窗口等了20秒之后才觸發(fā)計(jì)算,而在等待20s的時(shí)間內(nèi),如果在[20212-08 08:00 , 20212-08 08:01:00)在這延遲的20s能夠到達(dá),那么也會(huì)納入窗口1的計(jì)算中。
在Flink中如果時(shí)間語義設(shè)置為Event Time:env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
的話必須設(shè)置WaterMark。
Flink中WaterMark生成方式有兩種:
- 周期性生成,一般每隔200ms生成一個(gè)WaterMark
- 數(shù)據(jù)流中每個(gè)數(shù)據(jù)eventTime都產(chǎn)生一個(gè)watermark
原文鏈接:https://blog.csdn.net/LeoHan163/article/details/122293795
相關(guān)推薦
- 2022-09-09 如何通過pycharm實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的查詢等操作(非多步操作)_python
- 2023-01-31 python中的%?是什么意思,起到什么作用呢_python
- 2023-04-07 C++日期類運(yùn)算符重載方式_C 語言
- 2022-08-26 Python中CSV文件(逗號(hào)分割)實(shí)戰(zhàn)操作指南_python
- 2022-03-17 詳解Docker在哪里保存日志文件_docker
- 2022-04-11 C#基于SerialPort類實(shí)現(xiàn)串口通訊詳解_C#教程
- 2022-12-21 使用redis如何生成自增序列號(hào)碼_Redis
- 2022-10-05 C語言各種符號(hào)的使用介紹下篇_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支