4 算子
算子将一個或多個DataStream轉換為新的DataStream。程式可以将多個轉換組合成複雜的資料流拓撲。
本節介紹了基本轉換,應用這些轉換後的有效實體分區以及對Flink 算子連結的見解。
4.1 filter
DataStream→DataStream
計算每個資料元的布爾函數,并儲存函數傳回true的資料元。過濾掉零值的過濾器

Scala
Java
4.2 union
DataStream *→DataStream
兩個或多個資料流的聯合,建立包含來自所有流的所有資料元的新流
如果将資料流與自身聯合,則會在結果流中擷取兩次資料元
split拆分
DataStream→SplitStream
根據某些标準将流拆分為兩個或更多個流。
select
SplitStream→DataStream
從拆分流中選擇一個或多個流。
5 Data Sinks
資料接收器使用DataStream并将它們轉發到檔案,套接字,外部系統或列印它們。Flink帶有各種内置輸出格式,這些格式封裝在DataStreams上的算子操作後面:
writeAsText()/ TextOutputFormat
按字元串順序寫入資料元。通過調用每個資料元的toString()方法獲得字元串。
writeAsCsv(…)/ CsvOutputFormat
将元組寫為逗号分隔值檔案。行和字段分隔符是可配置的。每個字段的值來自對象的toString()方法。
print()/ printToErr()
在标準輸出/标準錯誤流上列印每個資料元的toString()值。可選地,可以提供字首(msg),其字首為輸出。這有助于區分不同的列印調用。如果并行度大于1,則輸出也将與生成輸出的任務的辨別符一起添加。
writeUsingOutputFormat()/ FileOutputFormat
自定義檔案輸出的方法和基類。支援自定義對象到位元組的轉換。
writeToSocket
根據一個套接字将資料元寫入套接字 SerializationSchema
addSink
調用自定義接收器函數。Flink捆綁了其他系統(如Apache Kafka)的連接配接器,這些系統實作為接收器函數。
實戰
需求
Socket發送的資料,把String類型轉成對象,然後把Java對象儲存至MySQL
建立一個實體類
MySQL建庫建表
socket傳送資料
接收
入庫
自定義Sink總結
RichSinkFunction
T就是你想要寫入對象的類型
重寫方法
open/ close
生命周期方法
invoke
每條記錄執行一次
資料接收器使用DataStream并将它們轉發到檔案,套接字,外部系統或列印它們。Flink帶有各種内置輸出格式,這些格式封裝在DataStreams上的 算子操作後面:
writeAsText()/ TextOutputFormat- 按字元串順序寫入元素。通過調用每個元素的toString()方法獲得字元串。
writeAsCsv(…)/ CsvOutputFormat- 将元組寫為逗号分隔值檔案。行和字段分隔符是可配置的。每個字段的值來自對象的toString()方法。
print()/ printToErr() - 在标準輸出/标準錯誤流上列印每個元素的toString()值。可選地,可以提供字首(msg),其字首為輸出。這有助于區分不同的列印調用。如果并行度大于1,則輸出也将與生成輸出的任務的辨別符一起添加。
writeUsingOutputFormat()/ FileOutputFormat- 自定義檔案輸出的方法和基類。支援自定義對象到位元組的轉換。
writeToSocket - 根據a将元素寫入套接字 SerializationSchema
addSink - 調用自定義接收器函數。Flink捆綁了其他系統(如Apache Kafka)的連接配接器,這些系統實作為接收器函數。
請注意,write*()方法DataStream主要用于調試目的。他們沒有參與Flink的檢查點,這意味着這些函數通常具有至少一次的語義。重新整理到目标系統的資料取決于OutputFormat的實作。這意味着并非所有發送到OutputFormat的資料元都會立即顯示在目标系統中。此外,在失敗的情況下,這些記錄可能會丢失。
要将流可靠,準确地一次傳送到檔案系統,請使用flink-connector-filesystem。此外,通過該.addSink(…)方法的自定義實作可以參與Flink的精确一次語義檢查點。