流式计算
特点: 数据是?界的(unbounded) 数据是动态的 计算速度是?常快的 计算不??次 计算不能终?
相对应,离线计算特点: 数据是有界的(Bounded) 数据静态的 计算速度通常较慢 计算只执??次 计算终会终?
在?数据计算领域中,通常所说的流式计算分为了实时计算和准实时计算。所谓实时计算就是来?条记录(?个事件Event)启动?次计算;?准实时计算则是介于实时计算和离线计算之间的?个计算,所以每次处理的是?个微?的批次
常?的离线和流式计算框架
常?的离线计算框架
- mapreduce
- spark-core
- flink-dataset
常?的流式计算框架
- storm(jstorm)
第?代的流式处理框架,每?成?条记录,提交?次作业。实时流处理,延迟低。 - spark-streaming
第?代的流式处理框架,短时间内?成mirco-batch,提交?次作业。准实时,延迟略?,秒级或者亚秒 级延迟。 - flink-datastream(blink)
第三代的流式处理框架,每?成?条记录,提交?次作业。实时,延迟低。
SparkStreaming基本?作原理
接收实时输?数据流,然后将数据拆分成多个batch,?如每收集1秒的数据封装为?个batch,然后将每个batch交给Spark的计算引擎进?处理,最后会?产出?个结果数据流,其中的数据,也是由?个?个的batch所组成的。 Spark Streaming提供了?种?级的抽象,叫做DStream,英?全称为Discretized Stream,中?翻译为“离散流”,它代表了?个持续不断的数据流。DStream可以通过输?数据源来创建,?如Kafka、Flume、ZMQ和Kinesis;也可以通过对其他DStream应??阶函数来创建,?如map、reduce、join、window。 DStream的内部,其实?系列持续不断产?的RDD。RDD是Spark Core的核?抽象,即,分布式式弹性数据集。DStream中的每个RDD都包含了?个时间段内的数据。 对DStream应?的算?,?如map,其实在底层会被翻译为对DStream中每个RDD的操作。?如对?个DStream执??个map操作,会产??个新的DStream。但是,在底层,其实其原理为,对输?DStream中每个时间段的RDD,都应??遍map操作,然后?成的新的RDD,即作为新的DStream中的那个时间段的?个RDD。
底层的RDD的transformation操作。 还是由Spark Core的计算引擎来实现的。Spark Streaming对Spark Core进?了?层封装,隐藏了细节,然后对开发?员提供了?便易?的?层次的API。
常?的流式计算框架比较
Storm V.S. SparkStreaming V.S. Flink 对于Storm来说**:** 1、建议在需要纯实时,不能忍受1秒以上延迟的场景下使?,?如实时计算系统,要求纯实时进?交易和析时。 2、在实时计算的功能中,要求可靠的事务机制和可靠性机制,即数据的处理完全精准,?条也不能多,?条也不能少,也可以考虑使?Storm,但是Spark Streaming也可以保证数据的不丢失。 3、如果我们需要考虑针对?峰低峰时间段,动态调整实时计算程序的并?度,以最?限度利?集群资源(通常是在?型公司,集群资源紧张的情况),我们也可以考虑?Storm
对于Spark Streaming来说**:** 1、不满?上述3点要求的话,我们可以考虑使?Spark Streaming来进?实时计算。 2、考虑使?Spark Streaming最主要的?个因素,应该是针对整个项?进?宏观的考虑,即,如果?个项?除了实时计算之外,还包括了离线批处理、交互式查询、图计算和MLIB机器学习等业务功能,?且实时计算中,可能还会牵扯到?延迟批处理、交互式查询等功能,那么就应该?选Spark?态,?Spark Core开发离线批处理,?Spark SQL开发交互式查询,?Spark Streaming开发实时计算,三者可以?缝整合,给系统提供?常?的可扩展性。
对于Flink来说**:** ?持?吞吐、低延迟、?性能的流处理 ?持带有事件时间的窗?(Window)操作 ?持有状态计算的Exactly-once语义 ?持?度灵活的窗?(Window)操作,?持基于time、count、session,以及data-driven的窗?操作 ?持具有Backpressure功能的持续流模型 ?持基于轻量级分布式快照(Snapshot)实现的容错 ?个运?时同时?持Batch on Streaming处理和Streaming处理 Flink在JVM内部实现了??的内存管理 ?持迭代计算 ?持程序?动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进?缓存
|