作者:梦瑶 2019-06-27 09:12:43
开发
架构
分布式 Apache Flink 和 Apache Storm 是当前业界广泛使用的两个分布式实时计算框架。其中 Apache Storm(以下简称“Storm”)在美团点评实时计算业务中已有较为成熟的运用,有管理平台、常用 API 和相应的文档,大量实时作业基于 Storm 构建。
创新互联服务项目包括广州网站建设、广州网站制作、广州网页制作以及广州网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,广州网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到广州省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
一、背景
Apache Flink 和 Apache Storm 是当前业界广泛使用的两个分布式实时计算框架。其中 Apache Storm(以下简称“Storm”)在美团点评实时计算业务中已有较为成熟的运用,有管理平台、常用 API 和相应的文档,大量实时作业基于 Storm 构建。
Apache Storm参考链接:http://storm.apache.org/
而 Apache Flink(以下简称“Flink”)在近期倍受关注,具有高吞吐、低延迟、高可靠和精确计算等特性,对事件窗口有很好的支持,目前在美团点评实时计算业务中也已有一定应用。
Apache Flink参考链接:https://flink.apache.org/
为深入熟悉了解 Flink 框架,验证其稳定性和可靠性,评估其实时处理性能,识别该体系中的缺点,找到其性能瓶颈并进行优化,给用户提供最适合的实时计算引擎,我们以实践经验丰富的 Storm 框架作为对照,进行了一系列实验测试 Flink 框架的性能。
计算 Flink 作为确保“至少一次”和“恰好一次”语义的实时计算框架时对资源的消耗,为实时计算平台资源规划、框架选择、性能调优等决策及 Flink 平台的建设提出建议并提供数据支持,为后续的 SLA 建设提供一定参考。
Flink 与 Storm 两个框架对比:
二、测试目标
评估不同场景、不同数据压力下 Flink 和 Storm 两个实时计算框架目前的性能表现,获取其详细性能数据并找到处理性能的极限;了解不同配置对 Flink 性能影响的程度,分析各种配置的适用场景,从而得出调优建议。
1、测试场景
1)“输入-输出”简单处理场景
通过对“输入-输出”这样简单处理逻辑场景的测试,尽可能减少其它因素的干扰,反映两个框架本身的性能。
同时测算框架处理能力的极限,处理更加复杂的逻辑的性能不会比纯粹“输入-输出”更高。
2)用户作业耗时较长的场景
如果用户的处理逻辑较为复杂,或是访问了数据库等外部组件,其执行时间会增大,作业的性能会受到影响。因此,我们测试了用户作业耗时较长的场景下两个框架的调度性能。
3)窗口统计场景
实时计算中常有对时间窗口或计数窗口进行统计的需求,例如一天中每五分钟的访问量,每 100 个订单中有多少个使用了优惠等。Flink 在窗口支持上的功能比 Storm 更加强大,API 更加完善,但是我们同时也想了解在窗口统计这个常用场景下两个框架的性能。
4)精确计算场景(即消息投递语义为“恰好一次”)
Storm 仅能保证“至多一次” (At Most Once) 和“至少一次” (At Least Once) 的消息投递语义,即可能存在重复发送的情况。
有很多业务场景对数据的精确性要求较高,希望消息投递不重不漏。Flink 支持“恰好一次” (Exactly Once) 的语义,但是在限定的资源条件下,更加严格的精确度要求可能带来更高的代价,从而影响性能。
因此,我们测试了在不同消息投递语义下两个框架的性能,希望为精确计算场景的资源规划提供数据参考。
2、性能指标
1)吞吐量(Throughput)
2)延迟(Latency)
三、测试环境
为 Storm 和 Flink 分别搭建由 1 台主节点和 2 台从节点构成的 Standalone 集群进行本次测试。其中为了观察 Flink 在实际生产环境中的性能,对于部分测内容也进行了 on Yarn 环境的测试。
1、集群参数
2、框架参数
四、测试方法
1、测试流程
1)数据生产
Data Generator 按特定速率生成数据,带上自增的 id 和 eventTime 时间戳写入 Kafka 的一个 Topic(Topic Data)。
2)数据处理
Storm Task 和 Flink Task (每个测试用例不同)从 Kafka Topic Data 相同的 Offset 开始消费,并将结果及相应 inTime、outTime 时间戳分别写入两个 Topic(Topic Storm 和 Topic Flink)中。
3)指标统计
Metrics Collector 按 outTime 的时间窗口从这两个 Topic 中统计测试指标,每五分钟将相应的指标写入 MySQL 表中。
Metrics Collector 按 outTime 取五分钟的滚动时间窗口,计算五分钟的平均吞吐(输出数据的条数)、五分钟内的延迟(outTime - eventTime 或 outTime - inTime)的中位数及 99 线等指标,写入 MySQL 相应的数据表中。最后对 MySQL 表中的吞吐计算均值,延迟中位数及延迟 99 线选取中位数,绘制图像并分析。
2、默认参数
3、测试用例
1)Identity
Identity 流程图
2)Sleep
Sleep 流程图
3)Windowed Word Count
Windowed Word Count 流程图
五、测试结果
① Identity 单线程吞吐量
Identity 单线程吞吐量
② Identity 单线程作业延迟
Identity 单线程作业延迟
③ Sleep吞吐量
Sleep 吞吐量
④ Sleep 单线程作业延迟(中位数)
Sleep 单线程作业延迟(中位数)
⑤ Windowed Word Count 单线程吞吐量
Windowed Word Count 单线程吞吐量
⑥ Windowed Word Count Flink At Least Once 与 Exactly Once 吞吐量对比
Windowed Word Count Flink At Least Once 与 Exactly Once 吞吐量对比
⑦ Windowed Word Count Storm At Least Once 与 At Most Once 吞吐量对比
Windowed Word Count Storm At Least Once 与 At Most Once 吞吐量对比
⑧ Windowed Word Count 单线程作业延迟
Windowed Word Count 单线程作业延迟
⑨ Windowed Word Count Flink At Least Once 与 Exactly Once 延迟对比
Windowed Word Count Flink At Least Once 与 Exactly Once 延迟对比
⑩ Windowed Word Count Storm At Least Once 与 At Most Once 延迟对比
Windowed Word Count Storm At Least Once 与 At Most Once 延迟对比
⑪Windowed Word Count Flink 不同 StateBackends 吞吐量对比
Windowed Word Count Flink 不同 StateBackends 吞吐量对比
⑫Windowed Word Count Flink 不同 StateBackends 延迟对比
Windowed Word Count Flink 不同 StateBackends 延迟对
六、结论及建议
1、框架本身性能
由①、⑤的测试结果可以看出,Storm 单线程吞吐约为 8.7 万条/秒,Flink 单线程吞吐可达 35 万条/秒。Flink 吞吐约为 Storm 的 3-5 倍。
由②、⑧的测试结果可以看出,Storm QPS 接近吞吐时延迟(含 Kafka 读写时间)中位数约 100 毫秒,99 线约 700 毫秒,Flink 中位数约 50 毫秒,99 线约 300 毫秒。Flink 在满吞吐时的延迟约为 Storm 的一半,且随着 QPS 逐渐增大,Flink 在延迟上的优势开始体现出来。
综上可得,Flink 框架本身性能优于 Storm。
2、复杂用户逻辑对框架差异的削弱
对比①和③、②和④的测试结果可以发现,单个 Bolt Sleep 时长达到 1 毫秒时,Flink 的延迟仍低于 Storm,但吞吐优势已基本无法体现。
因此,用户逻辑越复杂,本身耗时越长,针对该逻辑的测试体现出来的框架的差异越小。
3、不同消息投递语义的差异
由⑥、⑦、⑨、⑩的测试结果可以看出,Flink Exactly Once 的吞吐较 At Least Once 而言下降 6.3%,延迟差异不大;Storm At Most Once 语义下的吞吐较 At Least Once 提升 16.8%,延迟稍有下降。
由于 Storm 会对每条消息进行 ACK,Flink 是基于一批消息做的检查点,不同的实现原理导致两者在 At Least Once 语义的花费差异较大,从而影响了性能。而 Flink 实现 Exactly Once 语义仅增加了对齐操作,因此在算子并发量不大、没有出现慢节点的情况下对 Flink 性能的影响不大。Storm At Most Once 语义下的性能仍然低于 Flink。
4、Flink 状态存储后端选择
Flink 提供了内存、文件系统、RocksDB 三种 StateBackends,结合⑪、⑫的测试结果,三者的对比如下:
5、推荐使用 Flink 的场景
综合上述测试结果,以下实时计算场景建议考虑使用 Flink 框架进行计算:
七、展望
本次测试中尚有一些内容没有进行更加深入的测试,有待后续测试补充。例如:
本次测试仅观察了吞吐量和延迟两项指标,对于系统的可靠性、可扩展性等重要的性能指标没有在统计数据层面进行关注,有待后续补充。
Flink 使用 RocksDBStateBackend 时的吞吐较低,有待进一步探索和优化。
关于 Flink 的更高级 API,如 Table API & SQL 及 CEP 等,需要进一步了解和完善。
文章标题:对比Flink与Storm性能,分布式实时计算框架该这样选
链接地址:http://www.shufengxianlan.com/qtweb/news41/521741.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联