4 算子
算子将一个或多个DataStream转换为新的DataStream。程序可以将多个转换组合成复杂的数据流拓扑。
本节介绍了基本转换,应用这些转换后的有效物理分区以及对Flink 算子链接的见解。
4.1 filter
DataStream→DataStream
计算每个数据元的布尔函数,并保存函数返回true的数据元。过滤掉零值的过滤器
Scala
Java
4.2 union
DataStream *→DataStream
两个或多个数据流的联合,创建包含来自所有流的所有数据元的新流
如果将数据流与自身联合,则会在结果流中获取两次数据元
Scala
Java
split拆分
DataStream→SplitStream
根据某些标准将流拆分为两个或更多个流。
select
SplitStream→DataStream
从拆分流中选择一个或多个流。
Scala
Java
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的精确一次语义检查点。
参考
https://nightlies.apache.org/flink/flink-docs-master/docs/dev/datastream/overview/