168大数据

标题: Storm VS Flink ——性能对比 [打印本页]

作者: 168主编    时间: 2020-3-30 13:40
标题: Storm VS Flink ——性能对比
1.背景
Apache Flink 和 Apache Storm 是当前业界广泛使用的两个分布式实时计算框架。其中 Apache Storm(以下简称“Storm”)在美团点评实时计算业务中已有较为成熟的运用(可参考 Storm 的 可靠性保证测试),有管理平台、常用 API 和相应的文档,大量实时作业基于 Storm 构建。而 Apache Flink(以下简称“Flink”)在近期倍受关注,具有高吞吐、低延迟、高可靠和精确计算等 特性,对事件窗口有很好的支持,目前在美团点评实时计算业务中也已有一定应用。
为深入熟悉了解 Flink 框架,验证其稳定性和可靠性,评估其实时处理性能,识别该体系中的 缺点,找到其性能瓶颈并进行优化,给用户提供最适合的实时计算引擎,我们以实践经验丰富 的 Storm 框架作为对照,进行了一系列实验测试 Flink 框架的性能,计算 Flink 作为确保“至 少一次”和“恰好一次”语义的实时计算框架时对资源的消耗,为实时计算平台资源规划、框 架选择、性能调优等决策及 Flink 平台的建设提出建议并提供数据支持,为后续的 SLA 建设提供一定参考。
Flink 与 Storm 两个框架对比:
流计算框架Flink与Storm 的性能对比
StormFlink
状态管理无状态,需用户自行进行状态管理有状态
窗口支持对事件窗口支持较弱,缓存整个窗口的所有 数据,窗口结束时一起计算窗口支持较为完善,自带一些窗口聚合方法,并 且会自动管理窗口状态。
消息投递At Most Once At Least OnceAt Most Once At Least Once Exactly Once
容错方式ACK机制:对每个消息进行全链路跟踪,失败 或超时进行重发。检查点机制:通过分布式一致性快照机制,对数 据流和算子状态进行保存。在发生错误时,使系 统能够进行回滚。
应用现状在美团点评实时计算业务中已有较为成熟的 运用,有管理平台、常用 API 和相应的文档, 大量实时作业基于 Storm 构建。在美团点评实时计算业务中已有一定应用,但 是管理平台、API 及文档等仍需进一步完善。2.测试目标
评估不同场景、不同数据压力下 Flink 和 Storm 两个实时计算框架目前的性能表现,获取其详 细性能数据并找到处理性能的极限;了解不同配置对 Flink 性能影响的程度,分析各种配置的 适用场景,从而得出调优建议。
2.1 测试场景“输入-输出”简单处理场景
通过对“输入-输出”这样简单处理逻辑场景的测试,尽可能减少其它因素的干扰,反映两个框 架本身的性能。
同时测算框架处理能力的极限,处理更加复杂的逻辑的性能不会比纯粹“输入-输出”更高。
用户作业耗时较长的场景
如果用户的处理逻辑较为复杂,或是访问了数据库等外部组件,其执行时间会增大,作业的性 能会受到影响。因此,我们测试了用户作业耗时较长的场景下两个框架的调度性能。
窗口统计场景
实时计算中常有对时间窗口或计数窗口进行统计的需求,例如一天中每五分钟的访问量,每 100 个订单中有多少个使用了优惠等。Flink 在窗口支持上的功能比 Storm 更加强大,API 更 加完善,但是我们同时也想了解在窗口统计这个常用场景下两个框架的性能。
精确计算场景(即消息投递语义为“恰好一次”)
Storm 仅能保证“至多一次” (At Most Once) 和“至少一次” (At Least Once) 的消息投递语义, 即可能存在重复发送的情况。有很多业务场景对数据的精确性要求较高,希望消息投递不重不 漏。Flink 支持“恰好一次” (Exactly Once) 的语义,但是在限定的资源条件下,更加严格的精 确度要求可能带来更高的代价,从而影响性能。因此,我们测试了在不同消息投递语义下两个 框架的性能,希望为精确计算场景的资源规划提供数据参考。
2.2 性能指标3.测试环境
为 Storm 和 Flink 分别搭建由 1 台主节点和 2 台从节点构成的 Standalone 集群进行本次测试。其中为了观察 Flink 在实际生产环境中的性能,对于部分测内容也进行了 on Yarn 环境的测试。
3.1 集群参数参数项参数值
CPUQEMU Virtual CPU version 1.1.2 2.6GHz
Core8
Memory16GB
Disk500G
OSCentOS release 6.5 (Final)3.2 框架参数参数项Storm 配置Flink 配置
VersionStorm 1.1.0-mt002Flink 1.3.0
Master Memory2600M2600M
Slave Memory1600M * 1612800M * 2
Parallelism2 supervisor
16 worker
2 Task Manager 16 Task slots4.测试方法4.1 测试流程
数据生产
Data Generator 按特定速率生成数据,带上自增的 id 和 eventTime 时间戳写入 Kafka 的一个 Topic(Topic Data)。
数据处理
Storm Task 和 Flink Task (每个测试用例不同)从 Kafka Topic Data 相同的 Offset 开始消费, 并将结果及相应 inTime、outTime 时间戳分别写入两个 Topic(Topic Storm 和 Topic Flink)中。
指标统计
Metrics Collector 按 outTime 的时间窗口从这两个 Topic 中统计测试指标,每五分钟将相应的 指标写入 MySQL 表中。
Metrics Collector 按 outTime 取五分钟的滚动时间窗口,计算五分钟的平均吞吐(输出数据的 条数)、五分钟内的延迟(outTime - eventTime 或 outTime - inTime)的中位数及 99 线等指标, 写入 MySQL 相应的数据表中。最后对 MySQL 表中的吞吐计算均值,延迟中位数及延迟 99 线 选取中位数,绘制图像并分析。
4.2 默认参数
Storm 开启 ACK,ACKer 数量为 1。
Flink 的 Checkpoint 时间间隔为 30 秒,默认 StateBackend 为 Memory。
Sleep
Windowed Word Count
5.测试结果5.1 Identity 单线程吞吐量
5.2 Identity 单线程作业延迟
5.3 Sleep 吞吐量
5.4 Sleep 单线程作业延迟(中位数)
5.5 Windowed Word Count 单线程吞吐量
5.6 Windowed Word Count Flink At Least Once 与 Exactly Once 吞吐量对比
5.7 Windowed Word Count Storm At Least Once 与 At Most Once 吞吐量对比
5.8 Windowed Word Count 单线程作业延迟
5.9 Windowed Word Count Flink At Least Once 与 Exactly Once 延迟对比
5.10 Windowed Word Count Storm At Least Once 与 At Most Once 延迟对比
5.11 Windowed Word Count Flink 不同 StateBackends 吞吐量对比
5.12 Windowed Word Count Flink 不同 StateBackends 延迟对比
6.结论及建议6.1 框架本身性能6.2 复杂用户逻辑对框架差异的削弱6.3 不同消息投递语义的差异6.4 Flink 状态存储后端选择
• Flink 提供了内存、文件系统、RocksDB 三种 StateBackends,结合 5.11、5.12 的测试结果, 三者的对比如下:
StateBackend 过程状态存储 检查点存储 吞吐 推荐使用场景 Memory TM Memory JM Memory 高(3-5 倍 Storm) 调试、无状态或对数据是否 丢失重复无要求 FileSystem TM Memory FS/HDFS 高(3-5 倍 Storm) 普通状态、窗口、KV 结构 (建议作为默认 Backend)
RocksDB RocksDB on TM FS/HDFS 低(0.3-0.5 倍 Storm) 超大状态、超长窗口、大型 KV 结构 6.5 推荐使用 Flink 的场景
综合上述测试结果,以下实时计算场景建议考虑使用 Flink 框架进行计算:
7.展望8.参考内容
分布式流处理框架——功能对比和性能评估
intel-hadoop/HiBench: HiBench is a big data benchmark suite
Yahoo的流计算引擎基准测试
Extending the Yahoo! Streaming Benchmark
本文选自《不仅仅是流计算 Apache Flink实践》
作者:独孤风
来源:https://www.cnblogs.com/tree1123/p/11510282.html






欢迎光临 168大数据 (http://www.bi168.cn/) Powered by Discuz! X3.2