溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行Flink中的sink實(shí)戰(zhàn)

發(fā)布時(shí)間:2021-12-27 15:02:03 來源:億速云 閱讀:399 作者:柒染 欄目:大數(shù)據(jù)

如何進(jìn)行Flink中的sink實(shí)戰(zhàn),針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

關(guān)于sink

下圖來自Flink官方,紅框中就是sink,可見實(shí)時(shí)數(shù)據(jù)從Source處開始,在Transformation階段完成業(yè)務(wù)邏輯后在sink結(jié)束,因此sink可以用來處理計(jì)算結(jié)果,例如控制臺(tái)輸出或者保存數(shù)據(jù)庫(kù): 如何進(jìn)行Flink中的sink實(shí)戰(zhàn)

從一段實(shí)例代碼開始

  1. 下面是個(gè)簡(jiǎn)單的flink應(yīng)用代碼,紅框中的print方法就是sink操作: 如何進(jìn)行Flink中的sink實(shí)戰(zhàn)

  2. 下圖是官方給出的sink方式,都是DataStream類的API,直接調(diào)用即可實(shí)現(xiàn)sink,剛才代碼中的print就是其中一個(gè): 如何進(jìn)行Flink中的sink實(shí)戰(zhàn)

  3. 接下來看看上圖中API的源碼,先看print方法,在DataStream.java中,如下,實(shí)際上是調(diào)用了addSink方法,入?yún)⑹荘rintSinkFunction: 如何進(jìn)行Flink中的sink實(shí)戰(zhàn)

  4. 另一個(gè)常用API是writeAsText,源碼如下,調(diào)用了writeUsingOutputFormat方法: 如何進(jìn)行Flink中的sink實(shí)戰(zhàn)

  5. 追蹤<font color="blue">writeUsingOutputFormat</font>發(fā)現(xiàn)也是調(diào)用了addSink,入?yún)⑹?lt;font color="blue">OutputFormatSinkFunction</font>: 如何進(jìn)行Flink中的sink實(shí)戰(zhàn)

  6. print和writeAsText背后都在調(diào)用addSink,那么另一個(gè)常用的<font color="blue">writeAsCsv</font>方法呢?莫非也是調(diào)用addSink?打開一看果然,和writeAsText一樣調(diào)用了<font color="blue">writeUsingOutputFormat</font>,而該方法里面就是在調(diào)用addSink: 如何進(jìn)行Flink中的sink實(shí)戰(zhàn)

  7. 綜上所述,data sink的關(guān)鍵就是<font color="blue">addSink</font>的入?yún)?,?lt;font color="blue">SinkFunction</font>接口的實(shí)現(xiàn),通過類圖直觀看到常見的sink能力是如何實(shí)現(xiàn)的:

如何進(jìn)行Flink中的sink實(shí)戰(zhàn) 8. 從上圖可見抽象類<font color="blue">RichSinkFunction</font>與各種sink能力的關(guān)系十分緊密,我們應(yīng)該重點(diǎn)關(guān)注它,在類圖上展示方法簽名,如下圖: 如何進(jìn)行Flink中的sink實(shí)戰(zhàn) 9. 如上圖所示,<font color="blue">RichSinkFunction</font>本身沒有內(nèi)容,但是它實(shí)現(xiàn)<font color="blue">SinkFunction</font>,繼承<font color="blue">AbstractRichFunction</font>,是<font color="blue">RichFunction</font>和<font color="blue">SinkFunction</font>這兩種特性的結(jié)合; 10. <font color="blue">RichFunction</font>的特性在前面的《Flink的DataSource三部曲》中已經(jīng)了解,就是資源的open和close; 11. <font color="blue">SinkFunction</font>的特性呢?顯然是用來處理計(jì)算結(jié)果的,類圖上顯示的是兩個(gè)invoke方法,來看看官方的<font color="blue">PrintSinkFunction.java</font>: 如何進(jìn)行Flink中的sink實(shí)戰(zhàn) 12. <font color="blue">writer.write(record)</font>的源碼在PrintSinkOutputWriter.java,如下所示: 如何進(jìn)行Flink中的sink實(shí)戰(zhàn)

至此,我們已經(jīng)對(duì)Flink的sink有了基本了解:

  1. 負(fù)責(zé)實(shí)時(shí)計(jì)算結(jié)果的處理(如輸出或持久化);

  2. 主要實(shí)現(xiàn)方式是調(diào)用DataStream.addSink方法;

  3. 各種sink能力的實(shí)現(xiàn),主要途徑是實(shí)現(xiàn)addSink方法的入?yún)⒍x的接口;

關(guān)于如何進(jìn)行Flink中的sink實(shí)戰(zhàn)問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI