为了账号安全,请及时绑定邮箱和手机立即绑定

Flink与storm的主要区别译文。

标签:
资讯

Qestion:

Flink被用来和Spark相比,但是我认为这样的比较不太合适,把Flink窗口事件和Spark微批处理进行比较,同样的Flink与Samza对比也是,这两种情况下的比较都是实时流计算与批量处理事件策略的比较,我更想比较Flink与Storm之间的区别,这两者在概念上更相近。

我发现了这个幻灯片1(4),他主要的区别在于“可调整延迟时间”,在Slicon Angle的文章中一些暗示,flink更好的集成了spark与HadoopMr,但是没有实际确切的细节与提及。在最近的一场分享上 Fabian Hueske说“和Storm相比,flink提供了更高级的api,和一种更加轻量级的容错策略来提供exactly-once语义得到确切执行”。

上面提到的,我对这方面了解比较少?我不是能十分理解这些观点,可以解释一下这些问题吗?流在storm中是怎么处理的?在flink中又是怎么解决的? Hueske 所说的更高级的api是什么?更轻量级的容错策略又是什么?

answer1:

声明:我是Apache Flink 项目代码的提交者和PMC 成员,我只对Storm高层架构熟悉,对其底层实现不熟悉。

Apache Flink是一个统一流处理与批处理的框架。由于流水线数据在并行任务之间进行传输(包括数据的洗牌shuffles),flink在运行时支持流处理与批处理。数据被立刻的传输从生产数据的任务到接受数据的任务(在网络传输中被收集在一个缓存中,然后发送)之后,批处理的任务可以被选择来处理这些阻塞的数据。

Apache Spark 也是一个处理流和批处理的框架,Flink 的批处理api用法案列和Spark 非常相似,但是内部实现不一样。对于处理流来说,两种框架采用了不同的实现使得他们适合于不同场景的应用(Spark 微批处理 vs Flink  流计算),我可以说Spark与Flink的比较是有用有效的。然而Spark却和Flink 不是最相似的流处理引擎。

回到原来的问题。Apache Storm 只能处理流数据,没有批处理的能力。事实上,Flink的流式处理引擎和Storm很相似,比如 Flink的并行任务和Storm的bolt很相似。他俩都是通过流水线数据的传输来降低数据延时。然而Flink 提供了很多跟高级的api ,Flink的DataStream提供了Map、GroupBy、Window和Join等api来代替storm的bolt在一个或多个readers 和collectors的功能,而Storm在实现这些功能的时候都需要程序员自己实现。另外的不同在于处理语义。Storm提供了"at-least-once "而Flink提供了"exactly-once",两个框架给与语义不同的保证在实现上也就相当的不同。Storm 采用 record-level ack,Flink采用Chandy-Lamport的轻微变种。简言之,在数据源中周期性的注入marker,然后放入数据流中,无论何时只要任务执行器接受到一个marker,执行器检查他的内部状态。当一个marker被所有的数据输出sink给接收到,证明这个marker被提交(在这个marker之前的所有执行的数据,到上一个被提交的marker之后的所以数据)。万一有一个sink没有接受到marker,所有的源操作器将从置他们的处理数据到最近一次确认提交的marker然后继续执行。这种检查标记点的方法比record-level ack更加的轻量级。这个幻灯片(幻灯片2)讨论了flink相应的容错机制、检查点、处理状态。

Storm也提供了 exactly-once 以及高级api ,但是被称为Trident ,然而Trident 是在微批处理的基础上实现的,就很像Spark了而不是Flink

Flink的“可调延迟性”指的是Flink的记录从一个任务到另外一个任务的时间延迟。我再前面说了,flink使用流水线转移,在数据生成之后快速转发。为了效率,这些记录会被收集起来放在缓冲器中,当缓冲器满了或者是到了一个确定的阈值时间点被网络发送。这个阈值控制着这个记录的延迟。因为他指定了最大时间的延迟,一个记录从生成到发送出去。然而,他不能被用来保证一个数据从进入Flink项目到出Flink项目所花费的时间,因为这取决于任务处理执行时间和网络传输了多少次。

Answer2:

添加到上一条回答;

Flink比Storm的改进还有以下几点:

背压:Flink流计算当不同操作器在速度不同的时候表现的很好。因为低速流操作器背压高速流操作器很好,虽然网络层管理控制缓存池。

用户定义状态:Flink允许用户在操作器中自定义状态。这个自定义状态可以参与在检查点的容错处理,也提供exactly-once语义支持。参见这个列子(幻灯片3),在一个操作器中用户自定义机器状态,该状态始终与数据流一起参与checkpoint。

流窗口:流窗口和窗口聚合是数据流分析的重要组成部分。Flink配备了一个非常强大的窗口系统,支持多种类型的窗口。



作者:眠三沐
链接:https://www.jianshu.com/p/a39ed4ad38af


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消