Flink中常見的Sink操作:print 打印方法是怎么使用的?
經過一系列Transformation轉換操作后,最后一定要調用Sink操作,才會形成一個完整的DataFlow拓撲。只有調用了Sink操作,才會產生最終的計算結果,這些數(shù)據(jù)可以寫入到的文件、輸出到指定的網絡端口、消息中間件、外部的文件系統(tǒng)或者是打印到控制臺。
flink在批處理中常見的sink
print 打印
writerAsText 以文本格式輸出
writeAsCsv 以csv格式輸出
自定義連接器(addSink)
參考官網:https://ci.apache.org/projects/flink/flink-docs-release-1.13/zh/docs/dev/datastream/overview/#data-sinks

print 打印
打印是最簡單的一個Sink,通常是用來做實驗和測試時使用。如果想讓一個DataStream輸出打印的結果,直接可以在該DataStream調用print方法。另外,該方法還有一個重載的方法,可以傳入一個字符,指定一個Sink的標識名稱,如果有多個打印的Sink,用來區(qū)分到底是哪一個Sink的輸出。
下面的結果是WordCount例子中調用print Sink輸出在控制臺的結果,細心的讀者會發(fā)現(xiàn),在輸出的單詞和次數(shù)之前,有一個數(shù)字前綴,我這里是1~4,這個數(shù)字是該Sink所在subtask的Index + 1。有的讀者運行的結果數(shù)字前綴是1~8,該數(shù)字前綴其實是與任務的并行度相關的,由于該任務是以local模式運行,默認的并行度是所在機器可用的邏輯核數(shù)即線程數(shù),我的電腦是2核4線程的,所以subtask的Index范圍是0~3,將Index + 1,顯示的數(shù)字前綴就是1~4了。
這里在來仔細的觀察一下運行的結果發(fā)現(xiàn):
相同的單詞輸出結果的數(shù)字前綴一定相同,即經過keyBy之后,相同的單詞會被shuffle到同一個subtask中,并且在同一個subtask的同一個組內進行聚合。一個subtask中是可能有零到多個組的,如果是有多個組,每一個組是相互獨立的,累加的結果不會相互干擾。
