---Hadoop可以算得上是第一代大数据计算框架,能够很好地完成批处理任务
---Spark则是在Hadoop的基础上进行性能的提升,内存计算、迭代计算,实现了计算性能上的大大提升。
---Flink框架相比Spark多了优秀的实时流处理,大大降低了流计算的延迟。Flink所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已(批处理的时候就是把输入的数据流视为有界的,而流处理时是为无界的)。在Flink框架当中,所有的任务当成流来处理,因此实现了更低延迟的实时流处理。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
流处理:数据生产者将数据记录(也叫事件)写入有序数据流,数据使用者可以从中按相同顺序读取数据。----自己的理解:生产者实时的,源源不断的把数据往流里写,流里可能用flink之类的流处理框架做一些处理,处理完之后再发给消费者
流处理和批处理的区别
流处理:在线,实时产生的数据。单次处理的数据量小,但处理速度更快。
批处理:处理离线数据,冷数据。单个处理数据量大,处理速度比流慢。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Flink有JobManager和TaskManager
JobManager:也称之为Master用于协调分布式执行,它们用来调度task协调检查点,协调失败时恢复等。Flink运行时至少存在一个master处理器,如果配置高可用模式则会存在多个master处理器,其中有一个是leader其他都是standby。我理解这个就类似于redis里的哨兵
TaskManager:也称之为Worker,用于执行一个dataflow的task(或者特殊的subtask)、数据缓冲和datastream的交换,Flink运行时至少会存在一个worker处理器。
我理解worker就是干活的,master是监控和调度的
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Flink任务提交流程
Flink提交任务后Client向HDFS上传Flink的jar包和配置,之后向Yarn ResourceManager提交任务,ResourceManager分配容器资源并通知对用的NodeManager启动ApplicationMaster,ApplicationMaster启动后加载Flink的jar包和配置构建环境,然后启动JobManager,之后ApplicationMaster向ResourceManager申请资源启动TaskManager,ResourceManager分配容器资源后由ApplicationMaster加载Flink的jar包和配置构建环境并启动TaskManager,TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务。
HDFS:hadoop分布式文件系统。具体的没细查
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TaskManager与Slots
每个TaskManager(worker)是一个JVM进程,它可能会在独立的线程上执行一个或多个subtask。为了控制一个worker能接收多少个task,worker通过task slot来进行控制(一个worker至少有一个task slot)。task slot是用内存来拆分的,比如一个worker有三个slot,那么就是把这个worker的内存分成三份给slot,不同的slot的内存是隔离的
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Flink程序由Source、Transformation、Sink三个核心组件组成,Source主要负责数据读取,Transformation主要负责对数据的处理转换,Sink主要负责最终数据的输出,在各个组件之间流转的数据称为流(streams)。Transformations是以一个或多个stream作为输入的某种operation,利用这些stream进行计算从而产生一个或多个result stream。
DataFlow就指的下面这张拓扑图,包括source、Transformation、Sink和在他们中间流转的stream
parallelism(并发性)暂时不理解啥意思就先放放
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Exactly-once:严格一次。因为流处理的框架一般都是分布式、并行性的,流处理一般要求一条数据恰好被其中的某个operator(Flink里的Transformation)成功处理一次;既不能重复处理,也不能不处理,也不能因为失败就丢弃了(因此要求有重试机制)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这一段没太理解,有空再研究
https://blog.csdn.net/weixin_44240370/article/details/102594925