說說Flink中的窗口
今日的面試題:
1.用過Flink中的分布式緩存嗎?如何使用?
Flink實(shí)現(xiàn)的分布式緩存和Hadoop有異曲同工之妙。目的是在本地讀取文件,并把他放在 taskmanager 節(jié)點(diǎn)中,防止task重復(fù)拉取。
val env = ExecutionEnvironment.getExecutionEnvironment
// register a file from HDFS
env.registerCachedFile("hdfs:///path/to/your/file", "hdfsFile")
// register a local executable file (script, executable, ...)
env.registerCachedFile("file:///path/to/exec/file", "localExecFile", true)
// define your program and execute
... val input: DataSet[String] = ... val result: DataSet[Integer] = input.map(new MyMapper())
... env.execute()
2.說說Flink中的廣播變量,使用時(shí)需要注意什么?
我們知道Flink是并行的,計(jì)算過程可能不在一個(gè) Slot 中進(jìn)行,那么有一種情況即:當(dāng)我們需要訪問同一份數(shù)據(jù)。
那么Flink中的廣播變量就是為了解決這種情況。我們可以把廣播變量理解為是一個(gè)公共的共享變量,我們可以把一個(gè)dataset 數(shù)據(jù)集廣播出去,然后不同的task在節(jié)點(diǎn)上都能夠獲取到,這個(gè)數(shù)據(jù)在每個(gè)節(jié)點(diǎn)上只會(huì)存在一份。
3.說說Flink中的窗口?

Flink 支持兩種劃分窗口的方式,按照time和count。如果根據(jù)時(shí)間劃分窗口,那么它就是一個(gè)time-window 如果根據(jù)數(shù)據(jù)劃分窗口,那么它就是一個(gè)count-window。flink支持窗口的兩個(gè)重要屬性(size和interval)如果size=interval,那么就會(huì)形成tumbling-window(無重疊數(shù)據(jù)) 如果size>interval,那么就會(huì)形成sliding-window(有重
疊數(shù)據(jù)) 如果size< interval, 那么這種窗口將會(huì)丟失數(shù)據(jù)。比如每5秒鐘,統(tǒng)計(jì)過去3秒的通過路口汽車的數(shù)據(jù),將會(huì)漏掉2秒鐘的數(shù)據(jù)。通過組合可以得出四種基本窗口:
time-tumbling-window 無重疊數(shù)據(jù)的時(shí)間窗口,設(shè)置方式舉例:timeWindow(Time.seconds(5))
time-sliding-window 有重疊數(shù)據(jù)的時(shí)間窗口,設(shè)置方式舉例:timeWindow(Time.seconds(5), Time.seconds(3))
count-tumbling-window無重疊數(shù)據(jù)的數(shù)量窗口,設(shè)置方式舉例:countWindow(5)
count-sliding-window 有重疊數(shù)據(jù)的數(shù)量窗口,設(shè)置方式舉例:countWindow(5,3)
4.說說Flink中的狀態(tài)存儲(chǔ)?
Flink在做計(jì)算的過程中經(jīng)常需要存儲(chǔ)中間狀態(tài),來避免數(shù)據(jù)丟失和狀態(tài)恢復(fù)。選擇的狀態(tài)存儲(chǔ)策略不同,會(huì)影響狀態(tài)持久化如何和 checkpoint 交互。Flink提供了三種狀態(tài)存儲(chǔ)方式:MemoryStateBackend、FsStateBackend、RocksDBStateBackend。
5.Flink中的時(shí)間有哪幾類
Flink 中的時(shí)間和其他流式計(jì)算系統(tǒng)的時(shí)間一樣分為三類:事件時(shí)間,攝入時(shí)間,處理時(shí)間三種。
如果以EventTime 為基準(zhǔn)來定義時(shí)間窗口將形成EventTimeWindow,要求消息本身就應(yīng)該攜帶EventTime。
如果以IngesingtTime 為基準(zhǔn)來定義時(shí)間窗口將形成 IngestingTimeWindow,以 source 的systemTime為準(zhǔn)。
如果以ProcessingTime 基準(zhǔn)來定義時(shí)間窗口將形成 ProcessingTimeWindow,以 operator 的systemTime 為準(zhǔn)。
了解更多請(qǐng)點(diǎn)我頭像關(guān)注我去獲得,謝謝