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