谈到大数据流计算,就离不开该领域最强大的引擎:Spark 和 Flink,接下来详细对比Spark和Flink的6个方面。
Spark和Flink设计理念区别
1.Spark的技术理念,是使用微批( Micro- batch processing)来模拟流的计算,数据流以时间为单位被切分为一个个批次,通过分布式数据集进行批量处理。
2.Flink是基于事件驱动的,是面向流的处理框架,Flink基于每个事件一行一行地流式处理,是真正的流式计算。
Spark和Flink实时计算区别
1.Spark流处理的实时性还不够,所以无法用在一些对实时性要求很高的流处理场景中。
这是因为 Spark的流处理是基于微批处理,每次接收到一个时间间隔的数据才会去处理,所以天生很难在实时性上有所提升。
2.Flink采用了基于操作符(Operator)的连续流模型,可以做到微秒级别的延迟。
所以,Flink更适合用于实时处理的场景,详细的可以查看:Flink应用场景详解(4大Fink使用场景)。
而Spark最大的特点就是将计算数据、中间结果都存储在内存中,大大减少了IO开销,因而Spark更适合于迭代运算比较多的数据挖掘与机器学习运算。
Spark和Flink编程语言区别
1.Spark采用Scala开发实现,但Spark提供其他语言的 API,比如: Java,Python等等。
2.Flink采用Java开发实现,但Flink也提供了其它语法的API,比如也提供了Scala的API。
Spark和Flink架构方面区别
Spark架构采用了分布式计算中的Master-Slave模型,Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。
Spark运行架构,如下图所示:
Spark运行架构包括:
- 集群资源管理器(Cluster Manager);
- 运行作业任务的工作节点(Worker Node);
- 每个应用的任务控制节点(Driver);
- 每个工作节点上负责具体任务的执行进程(Executor);
2.Flink 在运行架构时主要包含:Jobmanager、Taskmanager和Slot,如下图所示:
Flink 的运行时架构中,最重要的就是两大组件:作业管理器(JobManger)和任务管理器(TaskManager)。
1.作业管理器(JobManger)
JobManager 是真正意义上的“管理者”(Master),负责管理调度。
2.任务管理器(TaskManager)
TaskManager 是“工作者”(Worker、Slave),负责执行任务处理数据。
Spark和Flink时间机制区别
1.Spark 支持的时间机制有限,只支持处理时间,如果产生数据堆积的话,误差则更明显。
2.Flink支持三种时间机制:事件时间,注入时间,处理时间,说明Flink在处理乱序大实时数据的时候更有优势。
Spark和Flink应用场景区别
1.Spark 适合于吞吐量比较大的场景,数据量非常大而且逻辑复杂的批数据处理,并且对计算效率有较高要求,比如:用大数据分析来构建推荐系统进行个性化推等。
2.Flink 主要用来处理要求低延时的任务,实时监控,实时报表,比如:阿里双11实时交易额,实时仓库的场景。
以上就是Spark和Flink的详细对比,希望对你选择Spark和Flink有所帮助!
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》