Yahoo 的 Storm 团队曾发表了一篇博客文章 ,并在其中展示了 Storm、Flink 和 Spark Streaming 的性能测试结果。该测试对于业界而言极 具价值,因为它是流处理领域的第一个基于真实应用程序的基准测试。

该应用程序从 Kafka 消费广告曝光消息,从 Redis 查找每个广告对应的广 告宣传活动,并按照广告宣传活动分组,以 10 秒为窗口计算广告浏览量。 10 秒窗口的最终结果被存储在 Redis 中,这些窗口的状态也按照每秒记录 一次的频率被写入 Redis,以方便用户对它们进行实时查询。

在最初的性能 测评中,因为 Storm 是无状态流处理器(即它不能定义和维护状态),所以 Flink 作业也按照无状态模式编写。所有状态都被存储在 Redis 中。

在性能测评中,Spark Streaming 遇到了吞吐量和延迟性难 两全的问题。随着批处理作业规模的增加,延迟升高。如果为了降低延迟而缩减规模,吞吐量就会减少。Storm 和 Flink 则可以在吞吐量增加时维持低延迟。

为了进一步测试 Flink 的性能,测试人员设置了一系列不同的场景,并逐步测试。

最初的性能测评专注于在相对较低的吞吐量下,测量端到端的延迟,即 使在极限状态下,也不关注容错性。此外,应用程序中的 key 基数非常小 (100),这使得测试结果无法反映用户量大的情况,或者 key 空间随着时间增长的情况.

由于最初的测试结果显示 Spark Streaming 的性能欠佳,因此这次的测试对 象只有 Storm 和 Flink,它们在最初的测试中有着类似的表现。

第 1 个变化是利用 Flink 提供的状态容错特性重新实现应用程序,如图 5-15 所示。这使得应用程序能保证 exactly-once。

第 2 个变化是通过用每秒可以生成数百万事件的数据生成器来增加输入流 的数据量。

结果如下:

使用高吞吐数据生成器的结果:(A)当Storm 与 Kafka 一起使用时,应用程序可以保持每秒 40 万事件的处理速度,并且瓶颈在于 CPU;当 Flink 与 Kafka 一起使用时,应用程序可以保持每秒300 万事件的处理速度,并且瓶颈在于网络;
(B)当消除网络瓶颈时,Flink 应用程序可以保持每秒1500 万事件的处理速度;
(C)在额外的测试中,消息队列由MapR Streams 提供,并且采用10 个高性能网络节点(硬件与前两种情况中的不同);Flink 应用程序可以保持每秒1000 万事件的处理速度.
Storm 能够承受每秒 40 万事件,但受限于 CPU;Flink 则可以达到每秒 300 万事件(7.5 倍),但受限于 Kafka 集群和 Flink 集群之间的网络。

为了看看在没有网络瓶颈问题时 Flink 的性能如何,我们将数据生成器移到 Flink 应用程序的内部。在这样的条件下,Flink 可以保持每秒 1500 万事件的处理速度(这是 Storm 的 37.5 倍)

将数据生成器整合到 Flink 应用程序中,可以测试性能极限,但这种 做法并不现实,因为现实世界中的数据必须从应用程序的外部流入。

值得注意的是,这绝对不是 Kafka 的极限(Kafka 可以支撑比这更大的吞吐量),而仅仅是测试所用的硬件环境的极限——Kafka 集群和 Flink 集群 之间的网络连接太慢。

最后一个变化是增加 key 基数(广告宣传活动的数量)。在最初的测试中, key 基数只有 100。这些 key 每秒都会被写入 Redis,以供查询。当 key 基数 增加到 100 万时,系统的整体吞吐量减少到每秒 28 万事件,因为向 Redis写入成了系统瓶颈。使用 Flink 可查询状态的一个早期原型可以消除这种瓶颈,使系统的处理速度恢复到每秒 1500 万事件,并 且有 100 万个 key 可供查询.

通过将查询功能移入Flink 可查询状态的一个原型,系统甚至可以在key 基数非常大的情况下仍然维持每秒 1500 万事件的处理速度.

本例说明了什么呢?通过避免流处理瓶颈,同时利用 Flink 的有状态流处理 能力,可以使吞吐量达到Storm 的 30 倍左右,同时还能保证exactly-once 和高可用性。大致来说,这意味着与 Storm 相比,Flink 的硬件成本或云计算成本仅为前者的 1/30,同样的硬件能处理的数据量则是前者的 30 倍。

更多Flink相关文章:

穿梭时空的实时计算框架——Flink对时间的处理

Flink快速入门--安装与示例运行

大数据实时处理的王者-Flink

更多实时计算,Flink,Kafka的技术文章欢迎关注实时流式计算

Flink,Storm,SparkStreaming性能对比的更多相关文章

  1. Storm VS Flink ——性能对比

    1.背景 Apache Flink 和 Apache Storm 是当前业界广泛使用的两个分布式实时计算框架.其中 Apache Storm(以下简称"Storm")在美团点评实时 ...

  2. Spark与Flink大数据处理引擎对比分析!

    大数据技术正飞速地发展着,催生出一代又一代快速便捷的大数据处理引擎,无论是Hadoop.Storm,还是后来的Spark.Flink.然而,毕竟没有哪一个框架可以完全支持所有的应用场景,也就说明不可能 ...

  3. [原] KVM 环境下MySQL性能对比

    KVM 环境下MySQL性能对比 标签(空格分隔): Cloud2.0 [TOC] 测试目的 对比MySQL在物理机和KVM环境下性能情况 压测标准 压测遵循单一变量原则,所有的对比都是只改变一个变量 ...

  4. 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)

    如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...

  5. Java--Stream,NIO ByteBuffer,NIO MappedByteBuffer性能对比

    目前Java中最IO有多种文件读取的方法,本文章对比Stream,NIO ByteBuffer,NIO MappedByteBuffer的性能,让我们知道到底怎么能写出性能高的文件读取代码. pack ...

  6. C正则库做DNS域名验证时的性能对比

    C正则库做DNS域名验证时的性能对比   本文对C的正则库regex和pcre在做域名验证的场景下做评测. 验证DNS域名的正则表达式为: "^[0-9a-zA-Z_-]+(\\.[0-9a ...

  7. 开发语言性能对比,C++、Java、Python、LUA、TCC

    一直想做开发语言性能对比,刚好有时间都做了给大家参考一下, 编译类:C++和Java表现还不错 脚本类:TCC脚本动态运行C语言,性能比其他脚本快好多... 想玩TCC的同学下载测试包,TCC目录下修 ...

  8. php+mysql预查询prepare 与普通查询的性能对比

    prepare可以解决大访问量的网站给数据库服务器所带来的负载和开销,本文章通过实例向大家介绍预查询prepare与普通查询的性能对比,需要的朋友可以参考一下. 实例代码如下: <?php cl ...

  9. 不同Framework下StringBuilder和String的性能对比,及不同Framework性能比(附Demo)

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 环境搭建 测试用例 MSDN说明 ...

随机推荐

  1. Python - __name__=='__main__'是干啥的,以及python -m与python的区别

    1. __name__=='__main__'是干啥的 先看例子,准备a.py和b.py放在同一个文件夹中 vi a.py # coding: utf-8 print("i am just ...

  2. SpringCloud的入门学习之Eureka(Eureka的单节点)

    SpringCloud--->Spring生态体系的微服务架构:https://spring.io/ 官网贴图,如下所示,介绍了微服务的架构体系(话说,英语好读官网,可能很爽吧,没体验过). 1 ...

  3. DataGridView中在新增行时怎样设置每个Cell单元格的字体样式

    场景 DataGridView怎样实现添加.删除.上移.下移一行: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10281414 ...

  4. WebService 接收JSON字符串

    晚上学习时公司的同事,暂且叫A吧,A:“我们公司XXX纺织的AM接口不通,让我看下”,我:“接口写的不是有AJAX异步请求的示例嘛,参考下,我都测试过接口,都是通的.”,A:“我走的不是AJAX,走的 ...

  5. docker下安装Redis

    Docker介绍 1.节约时间.快速部署和启动 2.节约成本 3.标准化应用发布 4.方便做持续继承 5作为集群中的轻量主机或节点 6.方便构建基于SOA或者微服务架构的系统 Docker中文文档 h ...

  6. 采坑 - LODOP,打印预览

    结合 layui.弹出框内容样式如下: 红框表示,左右的内边距. 图一 打印预览的样式如下:红框表示,左右的内边距. 图二 要根据图二的左右内边距,去修改图一的左右内边距.不然会影响正文内容高度的判断 ...

  7. 关于 SONY WF1000XM3 在 Windows 10 下蓝牙连接只有 Handfree 没有 Stereo 模式

    应该是驱动适配问题,目前粗暴的解决方案貌似下载安装一个 Intel APTX 驱动就可以了: https://www.dell.com/support/home/cn/zh/cndhs1/driver ...

  8. linux scp命令 将数据从一台linux服务器复制到另一台linux服务器

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...

  9. ssh 使用指定网卡 连接特定网络

    有时候,当电脑有两个网卡时:一个网卡 连接免费网络,一个网卡连接收费网络.这样当你想使用免费网络与远程服务器建立连接,使用诸如scp命令或者 ssh 隧道之类传输大文件.这时候你需要指定特定的特定的网 ...

  10. 在linux中怎么查看错误日志

    cat或者tail -f命令 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一/var/log/secure 与安全 ...