1. 如果下級存儲不支持事務(wù),F(xiàn)link 怎么保證 exactly-once?
答案:端到端的exactly-once對sink要求比較高,具體實現(xiàn)主要有冪等寫入和事務(wù)性寫入兩種方式。
冪等寫入的場景依賴于業(yè)務(wù)邏輯,更常見的是用事務(wù)性寫入。而事務(wù)性寫入又有預(yù)寫日志(WAL)和兩階段提交(2PC)兩種方式。
如果外部系統(tǒng)不支持事務(wù),那么可以用預(yù)寫日志的方式,把結(jié)果數(shù)據(jù)先當成狀態(tài)保存,然后在收到 checkpoint 完成的通知時,一次性寫入 sink 系統(tǒng)。
2. Flink的內(nèi)存管理是如何做的?
答案:Flink 并不是將大量對象存在堆上,而是將對象都序列化到一個預(yù)分配的內(nèi)存塊上。此外,F(xiàn)link大量的使用了堆外內(nèi)存。如果需要處理的數(shù)據(jù)超出了內(nèi)存限制,則會將部分數(shù)據(jù)存儲到硬盤上。Flink 為了直接操作二進制數(shù)據(jù)實現(xiàn)了自己的序列化框架。
3. Flink是如何支持批流一體的?
答案:Flink的開發(fā)者認為批處理是流處理的一種特殊情況。批處理是有限的流處理。Flink 使用一個引擎支持了DataSet API 和 DataStream API。
4. Flink是如何處理反壓的?
答案:Flink 內(nèi)部是基于 producer-consumer 模型來進行消息傳遞的,F(xiàn)link的反壓設(shè)計也是基于這個模型。Flink 使用了高效有界的分布式阻塞隊列,就像 Java 通用的阻塞隊列(BlockingQueue)一樣。下游消費者消費變慢,上游就會受到阻塞。
更多關(guān)于大數(shù)據(jù)培訓(xùn)的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓(xùn)服務(wù)經(jīng)驗,采用全程面授高品質(zhì)、高體驗培養(yǎng)模式,擁有國內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),助力更多學(xué)員實現(xiàn)高薪夢想。