東莞網(wǎng)上商城網(wǎng)站建設(shè)南京seo公司
背景
在flink中,我們經(jīng)常使用ontimer計(jì)時(shí)器實(shí)現(xiàn)很多邏輯的功能,常見(jiàn)的比如某個(gè)傳感器溫度增加連續(xù)超過(guò)1分鐘的告警輸出等,本文就來(lái)簡(jiǎn)單記錄下計(jì)時(shí)器的作用
計(jì)時(shí)器
ontimer的定義
public void onTimer(long timestamp, OnTimerContext ctx, Collector<O> out)
timestamp: 觸發(fā)定時(shí)器的事件/處理時(shí)間戳,這個(gè)時(shí)間是register定時(shí)器時(shí)指定的那個(gè)時(shí)間
ctx: 上下文對(duì)象,通過(guò)它可以訪問(wèn)水位線時(shí)間戳,處理時(shí)間時(shí)間戳,當(dāng)前鍵值等
out:主輸出,注意,ontimer定時(shí)器中也可以輸出記錄
基本上在定時(shí)器中我們能實(shí)現(xiàn)的邏輯和在process主邏輯中的一樣
計(jì)時(shí)器局限性
我們只能在KeyedStream上,也就是鍵值分區(qū)數(shù)據(jù)流上注冊(cè)計(jì)時(shí)器,如果你想要在DataStream上面使用,你需要首先把DataStream轉(zhuǎn)換成KeyedStream,而轉(zhuǎn)換的方式可以通過(guò)實(shí)現(xiàn)一個(gè)返回常數(shù)值的KeySelector來(lái)創(chuàng)建KeyedStream,但是一旦這樣做,下游的算子的并行度相當(dāng)于實(shí)際變成了1,性能會(huì)受到極大的影響.