北京市昌平区建材城西路金燕龙办公楼一层电话:400-618-9090第二章Flink批流一体API开发课程目标了解流处理的相关概念掌握FlinkDataStream-SourceOperator掌握FlinkDataStream-TransformationOperator掌握FlinkDataStream-SinkOperator了解Flink的累加器了解Flink的广播变量了解Flink的分布式缓存1.流处理相关概念1.1流处理的基本概念一般来说,由于需要支持无限数据集的处理,流处理系统一般采用一种数据驱动的处理方式。它会提前设置一些算子,然后等到数据到达后对数据进行处理。为了表达复杂的计算逻辑,包括Flink在内的分布式流处理引擎一般采用DAG图来表示整个计算逻辑,其中DAG图中的每一个点就代表一个基本的逻辑单元,也就是算子。由于计算逻辑被组织成有向图,数据会按照边的方向,从一些特殊的Source节点流入系统,然后通过网络传输、本地传输等不同的数据传输方式在算子之间进行发送和处理,最后会通过Sink节点将计算结果发送到某个外部系统或数据库中。对于分布式流处理引擎,实际运行时物理模型可能比较复杂,由于每个算子都可能有多个实例。如图所示,作为Source的A算子有两个实例,中间算子C也有两个实例。在逻辑模型中,A和北京市昌平区建材城西路金燕龙办公楼一层电话:400-618-9090B是C的上游节点,而在对应的物理逻辑中,C的所有实例和A、B的所有实例之间可能都存在数据交换。在物理模型中,会根据计算逻辑,采用系统自动优化或人为指定的方式将计算工作分布到不同的实例中。只有当算子实例分布到不同进程上时,才需要通过网络进行数据传输,而同一进程中的多个实例之间的数据传输通常是不需要通过网络的。由于流处理的计算逻辑是通过DAG图来表示的,因此它们的大部分API都是围绕构建这种计算逻辑图来设计的。例如,对于几年前非常流行的ApacheStorm,它的WordCount的示例如表1所示。基于ApacheStorm用户需要在图中添加Spout或Bolt这种算子,并指定算子之前的连接方式。这样,在完成整个图的构建之后,就可以将图提交到远程或本地集群运行。与之对比,ApacheFlink的接口虽然也是在构建计算逻辑图,但是Flink的API定义更加面向数据本身的处理逻辑,它把数据流抽象成为一个无限集,然后定义了一组集合上的操作,然后在底层自动构建相应的DAG图。可以看出,Flink的API要更“上层”一些。1.2流处理和批处理https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/learn-flink/overview/北京市昌平区建...