人们想要高吞吐,低延迟处理数据,以前的storm只能低延迟,做不到高吞吐,spark Streaming可以高吞吐,但是更多的场景是要根据事件数据切割,或者说要实现比较复杂。
deploy 部署,可以单机,基于yarn,基于云
core 分布式数据流处理
CEP 就是复杂事件处理,一般就是比如说一条流中的两个数据有关联才用到。
Flink 的分布式特点体现在它能够在成百上千台机器上运行,它将大型的计算
任务分成许多小的部分,每个机器执行一部分
第二问基本架构TaskManager JobManager 都第三次了不再细说
在数据流方面 spark 面对批处理和流处理是两套框架 flink则是全是流(把批当成流的一种特殊形式)
任务提交流程yarn slot与taskManager的关系我的非官方理解:第一,slot相当于是把taskManager分成了多分,比如说,当把map算子的并行度设置成2时,那么就有两个slot中包含该算子,第二,每一个taskManager是一个JVM进程,但是taskManager有时会有多个,这是因为你的slot设置数量小于你设置的最大并行度的数量, 即taskManager的数量是Job的最大并行度除以每个TaskManager分配的任务槽数。
flink操作 执行环境StreamExecutionEnvironment.getExecutionEnvironment
创建一个执行环境,表示当前执行程序的上下文。 如果程序是独立调用的,则
此方法返回本地执行环境;如果从命令行客户端调用程序以提交到集群,则此方法
返回此集群的执行环境,也就是说,getExecutionEnvironment 会根据查询运行的方
式决定返回什么样的运行环境,是最常用的一种创建执行环境的方式。
StreamExecutionEnvironment.createLocalEnvironment
StreamExecutionEnvironment.createRemoteEnvironment
返回集群执行环境,将 Jar 提交到远程服务器。需要在调用时指定 JobManager
的 IP 和端口号,并指定要在集群中运行的 Jar 包。
readTextFile(path)
readFile(fileInputFormat, path)
env.socketTextStream(“localhost”, 11111)
env.fromCollection(list)
env.fromCollection(iterator)
env.fromElement(对象)
transformationmap filter 简单的不再说
//KeyBY
KeyStream<类,tuple> a=data.keyBy("id")
KeyStream<类,T> a=data.keyBy(data->data.getId)
KeyStream<类,T> a=data.keyBy(类::getId)
//max
DataStream<类> resultStream=a.max("temperature");
//maxBy 和max的区别就是maxBy返回的值带着该数据的全部值,而max除了那个求最大那个数据,其他数据都是流中接收的第一个数据
reduce向这种需要有界的进行聚和必修要先聚合,group by key by 这两个先聚合,至于这两个有啥区别,俺也不太清楚,用的时候group by针对的是DataSet ,keyBy针对的是DataStream分流:filter , split(过期,不建议),outputTag;
聚合流:Connect(只能连接两条流,但流的类型可以不一样ConnectedStreams会对两个流的数据应用不同的处理方法,且双流之间可以共享状态。connect经常被应用在对一个数据流使用另外一个流进行控制处理的场景上。)
connect如何用呢?先把他们都放到connect,然后再开始通过其他算子进行合并操作。
union(可连接多条流,但是流的类型必须一样)
滚动聚合算子 sum min max minBy maxBy
window api
1滚动窗口
sink 主要参考尚硅谷和官网


