我们知道,Storm已经不流行了,目前几乎没有公司用。
对于大数据开发,主流的就是Hadoop Spark和Flink,一般学习顺序也都是Hadoop——spark——Flink。
现在也有很多人说Spark已经不行了,更倾向于学习和使用Flink。那是因为一些大厂例如阿里主要是使用Flink,双十一这种大型的实时计算量都是用flink来做的
大数据起源于批处理,在批处理上,Spark有很深的积累。为了应对全球大量业务的实时需求,Spark也推出了流计算解决方案——SparkStreaming。
但Spark毕竟不是一款纯流式计算引擎,所以在时效性等问题上,始终无法提供极致的流批一体体验。
而后起新秀Flink的基本数据模型则是数据流,以及事件(Event)的序列。数据流作为数据的基本模型,可以是无边界的无限“流”,即一般意义上的流处理;也可以是有边界的有限“流”,也就同时兼顾了批处理。
Flink相比于Spark而言还有诸多明显优势:
支持高效容错的状态管理,保证在任何时间都能计算出正确的结果;
同时支持高吞吐、低延迟、高性能的分布式流式数据处理框架;
支持事件时间(EventTime)概念,事件即使无序到达甚至延迟到达,数据流都能够计算出精确的结果;
轻量级分布式快照(Snapshot)实现的容错,能将计算过程分布到单台并行节点上进行处理。
阿里早在几年前就开始探索Flink的实战应用,随着双11阿里基于Flink实时计算场景的屡战屡胜,毋庸置疑,Flink将会加速成为大厂主流的数据处理框架,最终化身下一代大数据处理标准。 Flink通过实现Google Dataflow流式计算模型实现了高吞吐、低延迟、高性能兼具实时流式计算框架,同时支持高度容错的状态管理,防止状态在计算过程中因系统异常丢失,Flink周期性的通过分布式快照技术Checkpoint实现状态的持久化维护,即使在系统异常情况下也能计算出正确的结果。
常用流计算框架对比:
- Storm虽然可以做到低延迟,但是无法实现高吞吐,也不能在故障发生时准确地处理计算状态。
- Spark Streaming通过采用微批处理方法实现了高吞吐和容错性, 但是牺牲了低延迟和实时处理能力。
- Spark的另一个流计算组件Structured Streaming,包括微批处理和持续处理两种处理模型。采用微批处理时,最快响应时间需要 100毫秒,无法支持毫秒级别响应。采用持续处理模型时,可以支持毫秒级别响应,但是只能做到“至少一次”的一致性,无法做到“精确一次”的一致性。
Flink的优势:
- 同时支持高吞吐、低延迟、高性能
- 支持事件时间(EventTime)概念:大多数框架都只支持系统时间,事件传输到计算框架处理时的当前系统时间,Flink支持事件事件进行窗口计算,即使事件乱序到达,流系统也能计算出精确的结果,保持事件产生时的时序性,尽可能避免网络传输、硬件系统的影响。
- 支持状态计算:流计算过程中会将算子的中间状态保存在内存或文件系统,下一个事件进入算子后可以从之前的状态获取中间结果,避免每次基于全部原始数据来计算统计结果。对于数据量大运算逻辑复杂的流计算场景,有状态计算发挥了非常重要的作用。
- 支持高度灵活的窗口(Window)操作
- 基于轻量级分布式快照(Snapshot)实现的容错
- 基于JVM实现独立的内存管理
- Save Point(保存点):在版本升级运维时,通过Save Point将任务执行的快照保存在存储介质上,任务重启时可以直接从事先保存的Save Point中恢复原有的计算状态。
Flink的应用场景:
事件驱动型应用
事件驱动型应用是一类具有状态的应用,它从一个或多个事件数据流中读取事件, 并根据到来的事件做出反应,包括触发计算、状态更新或其他外部动作等。
- 反欺诈
- 异常检测
- 基于规则的业务告警
- 业务流程监控等
数据分析应用
数据分析应用会从原始数据中提取信息,并得到富有洞见的观察。
实时智能推荐
复杂事件处理
实时数仓与ETL
流数据分析
实时报表分析
大规模图分析等
但是为了找工作,建议还是都学,首先,我们需要通过Hadoop来建立对大数据的基本概念,当今的Hadoop已经成长为一个庞大的体系,只要有和海量数据相关的领域,都有Hadoop的身影。 现阶段,Hadoop仍然主导着大数据领域,我们可以学习先进的技术,但更是为了现阶段的就业,就目前阶段而言,学大数据必学Hadoop。
MapReduce中有许多经典的思想,值得我们学习,这对我们理解大数据十分有帮助。
而Spark要替换的是Hadoop中的MapReduce,而不是Hadoop,Hadoop是一个工具包,而Spark和MapReduce一样,只是一种工具而已。
所以Hadoop是必须学习的,Spark也要熟悉。
对于有志于在大数据等领域发展的同学,可以按照Java-Hadoop-Spark-Flink这样的路径。另外对于spark来说,学一点Scala则会更有帮助。
版权归原作者 新火试新茶▼ 所有, 如有侵权,请联系我们删除。