天天看點

Flink實戰(五) - DataStream API程式設計(下)4 算子參考

4 算子

算子将一個或多個DataStream轉換為新的DataStream。程式可以将多個轉換組合成複雜的資料流拓撲。

本節介紹了基本轉換,應用這些轉換後的有效實體分區以及對Flink 算子連結的見解。

4.1 filter

DataStream→DataStream

計算每個資料元的布爾函數,并儲存函數傳回true的資料元。過濾掉零值的過濾器

Flink實戰(五) - DataStream API程式設計(下)4 算子參考

Scala

Flink實戰(五) - DataStream API程式設計(下)4 算子參考

Java

Flink實戰(五) - DataStream API程式設計(下)4 算子參考

4.2 union

DataStream *→DataStream

兩個或多個資料流的聯合,建立包含來自所有流的所有資料元的新流

如果将資料流與自身聯合,則會在結果流中擷取兩次資料元

Flink實戰(五) - DataStream API程式設計(下)4 算子參考
Flink實戰(五) - DataStream API程式設計(下)4 算子參考
Flink實戰(五) - DataStream API程式設計(下)4 算子參考

split拆分

DataStream→SplitStream

根據某些标準将流拆分為兩個或更多個流。

Flink實戰(五) - DataStream API程式設計(下)4 算子參考

select

SplitStream→DataStream

從拆分流中選擇一個或多個流。

Flink實戰(五) - DataStream API程式設計(下)4 算子參考
Flink實戰(五) - DataStream API程式設計(下)4 算子參考
Flink實戰(五) - DataStream API程式設計(下)4 算子參考

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

建立一個實體類

Flink實戰(五) - DataStream API程式設計(下)4 算子參考

MySQL建庫建表

Flink實戰(五) - DataStream API程式設計(下)4 算子參考
Flink實戰(五) - DataStream API程式設計(下)4 算子參考

socket傳送資料

Flink實戰(五) - DataStream API程式設計(下)4 算子參考

接收

Flink實戰(五) - DataStream API程式設計(下)4 算子參考

入庫

Flink實戰(五) - DataStream API程式設計(下)4 算子參考

自定義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的精确一次語義檢查點。

參考

https://nightlies.apache.org/flink/flink-docs-master/docs/dev/datastream/overview/