51.官方建议将Slot数目设置为TaskManager下可用的CPU核心数,那么平均下来,每个Slot都能获得1个CPU核心
52.Flink程序的骨架结构——创建执行环境、获取数据源、对数据进行处理、将处理结果输出、执行以上流程
53.Flink一般执行在一个集群上,执行环境是Flink程序执行的上下文,它提供了一系列作业与集群交互的方法,比如作业如何与外部世界交互·流处理的执行环境:org.apache.flink.streaming.api.environment.StreamExecutionEnvironment·批处理的执行环境:org.apache.flink.api.java.ExecutionEnvironment
54.可以作为Flink数据源的是:基于文件、基于套接字、基于集合、外部数据源
55.结果输出:sink——将计算结果输出到外部系统,目的地可能是一个消息队列、文件系统或数据库,或其它,输出结果的部分统称为sink
56.执行——调用执行环境execute()方法来明确通知Flink去执行
57.Flink是延迟执行,当程序明确调用execute()方法时,Flink才会将数据流图转化为一个JobGraph,提交给Manager,JobManager根据当前执行环境来执行这个作业
58.Transformation的使用方法主要包括4种:·单数据流转换——每一个元素都进行了相应的转换——map、filter、flatMap
·基于Key的分组转换——keyBy()将一个DataStream转化为一个KeyedStream聚合操作(sum()、max()、min()、reduce())将KeyedStream转化为DataStream数据分组后可进行聚合操作keyBy():根据某种属性或数据的某个字段进行分组,对一个分组内的数据进行处理Aggregation:聚合,常见的聚合函数:sum、max、min使用聚合函数时,我们需要一个参数来指定按照哪个字段进行聚合,可以使用数字位置来指定对哪个字段进行聚合reduce——比Aggregation更通用·在KeyedStream上生效·接受两个输入、生成一个输出·两两合一地汇总操作
·多数据流转换——
1.union·将多个同类型的DataStream<T>合并为一个DataStream<T>·数据按照先进先出合并
2.Connect·只能连接两个DataStream数据流·两个数据流类型可以不一致·应用场景为:使用一个控制流对另一个数据流进行控制·两个DataStream经过connect()之后转化为ConnectedStreams,ConnectedStreams会对两个流的数据应用不同的处理方法,且双流之间可以共享状态
·数据重分布转换——数据重分布:默认情况下,数据自动分布到多个实例,(或者称之为分区)上,可以手动在多个实例上进行数据分配,避免数据倾斜基于正态分布,将数据随机分配到下游各算子实例上dataStream.shuffle();数据会被复制并广播发送给下游所有实例上dataStream.broadcast();将所有数据发送给下游算子的第一个实例上dataStream.global();并行度——使用并行度来定义某个算子被切分为多少个算子子任务并行度可以在整个作业的执行环境层面设置,也可以对某个算子单独设置Rebalance()使用Round-Ribon思想将数据均匀分配到各实例上rescale()就近发送给下游每个实例
59.EventTime事件时间IngestionTime摄入时间ProcessingTime处理时间
60.EventTime——是事件发生的时间——必须配置两项·生成Watermark·使用时间戳为数据流中的每个事件的EventTime赋值