前言
這一講將介紹一下序列化機制和過程函數(processfunction)。
序列化機制
使用 Flink 編寫處理邏輯時,新手總是容易被林林總總的概念所混淆:
爲什麼 Flink 有那麼多的類型聲明方式?
BasicTypeInfo.STRING_TYPE_INFO、Types.STRING 、Types.STRING() 有何區別?
TypeInfoFactory 又是什麼?
TypeInformation.of 和 TypeHint 是如何使用的呢?
接下來本文將逐步解密 Flink 的類型和序列化機制(TypeInformation)。
Flink 的類型系統源碼位於 org.apache.flink.api.common.typeinfo 包,讓我們對上圖TypeInformation深入追蹤,看一下類的繼承關係圖:
可以看到,上面兩個圖片是一一對應的,TypeInformation 類是描述一切類型的公共基類,它和它的所有子類必須可序列化(Serializable),因爲類型信息將會伴隨 Flink 的作業提交,被傳遞給每個執行節點。
由於 Flink 自己管理內存,採用了一種非常緊湊的存儲格式(見官方博文),因而類型信息在整個數據處理流程中屬於至關重要的元數據。