Yahoo的流计算引擎基准测试

  • 时间:
  • 浏览:10
  • 来源:UU直播快三官方_大发UU直播快3

最后,第一另另有还还有一个什么的问题是当Spark Streaming 出理 数率跟不上时,基准测试的输入数据也能 入队列并守候几分钟以让Spark 完成出理 所有的事件。 这一状况示于下图。 在这一不良的工作最好的辦法 ,Spark溢出一定量的数据到磁盘上,在极端的状况下,亲戚亲戚朋友最终机会有还还有突然冒出磁盘空间严重不足的状况。

操作的流程如下(和在下面的图中示出):

Storm0.10.0:

每个topology使用10个worker,接近亲戚亲戚朋友看得人的雅虎內部正在使用的topology的平均数目。 当然,雅虎內部的Storm集群更大,一些 它们是多租户并运行着一些的 topology

机会亲戚亲戚朋友最初使用 Storm是在2012年决定的,但目前的流出理 系统现状机会发生了很大的改变。 现在有几个 一些值得关注的竞争对手包括 Apache Flink,Apache Spark(Spark Streaming),Apache Samza,Apache Apex和谷歌的Cloud Dataflow 有太少的议论探讨哪个系统都也能提供最佳的功能集,哪一另另有还还有一个在哪些地方条件下性能更好(类式见  这里 , 这里 ,  这里 ,还有这里 )。

第一是microbatch持续时间。 这一控制维度不存于像Storm纯流计算引擎系统中。 增加持续时间同时也增加了守候时间,原先就减少(调度)开销并一些 增加了最大吞吐量。 挑战是,在出理 吞吐量延迟最小化和最优批持续时间之间调整是一另另有还还有一个耗时的过程。 从本质上讲,亲戚亲戚朋友要选着 一另另有还还有一个批出理 时间,运行基准80分钟,检查结果,并减少/增加批持续时间。

免责声明:2015年12月17日的数据,数据团队机会给亲戚亲戚朋友指出,亲戚亲戚朋友不小心在Flink基准测试中留下的一些调试代码。 所以Flink基准测试应该只有直接与Storm和Spark比较。 亲戚亲戚朋友在重新运行和重新发布报告时机会出理 了这一什么的问题。

对亲戚亲戚朋友来说 Storm 足够满足要求。 拓扑形状写起来简单,很容易获得低延迟, 和Flink相比能得到更高的吞吐量。机会那么ACKING,Storm甚至在非常高的吞吐量时击败Flink,亲戚亲戚朋友期望进一步优化bolts组合,更智能的tuples路由和改进ACKING,让Storm ACKING启用时都也能在非常高的吞吐量时与Flink相竞争。

第还还有一个是并行度。 增加并行度似乎简单,但对Spark来说做起来难。 对于一另另有还还有一个真正的流计算引擎系统像Storm,一另另有还还有一个bolt 实例都也能使用随机洗牌(reshuffling)最好的辦法 发送它的结果到其它任何数量的bolt 实例。 要扩大规模,增加第二bolt 的并行度就都也能。 Spark在一样的状况下,亲戚亲戚朋友也能 执行类式于Hadoop的MapReduce的进程决定整个集群合并洗牌操作, reshuffling 有一种引入了值得考虑的开销。 起初,亲戚亲戚朋友以为亲戚亲戚朋友的操作是计算密集型(CPU-bound)的,为较多分区做reshuffling相对reshuffling 自身的开销是利大于弊,但实际上瓶颈在于调度,所以reshuffling 只增加开销。 亲戚亲戚朋友怀疑高吞吐率的操作(对spark来说)时候计算密集型的。

基准设置

这一另另有还还有一个不怎么粗糙,但这一基准测试并那么对哪些地方地方引擎定义窗口数据粒度的粗细,时候 我提供了亲戚亲戚朋友行为的更高级视图。

与Flink和Spark Streaming相比,Storm毫不逊色。 Storm 0.11.0 优于 Storm 0.10.0,显然0.11.0对0.10.0版本做了优化。 然而,在高吞吐量上Storm的一另另有还还有一个版本依旧捉襟见肘, 其中Storm 0.10.0 无法出理 超过每秒138000事件的吞吐量。

无背压(上图)的性能,以及与背压启用(下图)。 启用背压后延迟性能较差(70秒VS 120秒)。 注意,这有一种的结果对流出理 系统是不可接受的,机会数据出理 数率都落后于 输入数据的数率。 批出理 的时间窗口设定为2秒时,具有18000的吞吐量。

Storm0.11.0:

Storm的基准测试使用Java API编写。 亲戚亲戚朋友测试了Apache的Storm 0.10.0 和 0.11.0-Snapshot版本。 Snapshot commit hash是a8d253a。 每个主机分配一另另有还还有一个工作进程,每个worker给予16 tasks 以运行16个executors ,也时候 我每个cpu核心一另另有还还有一个executor。

每次运行时,进程会读取Redis的Windows和Windows的时间窗口并比较它们的last_updated_at次数、产生的延迟数据点。 机会机会上次事件窗口只有被发送(emit),该窗口将关闭,一另另有还还有一个窗口的时间,其last_updated_at时间减去其持续时间之差表示是在窗口从给Kafka到Redis期间通过应用进程的时间。

机会单个生产者最大每秒产生约一万七千事件,亲戚亲戚朋友跑了Kafka生产者的多个实例,以创建所需的负载。亲戚亲戚朋友使用在这一基准测试中利用了20到2还还有一个节点(作为生产者实例)。

近来实时流计算引擎系统之间的竞争日趋白热化,但并那么明显的赢家, 每个平台时候个人所有的优点和缺点。 性能时候 我其中之一,一些如安全、工具集也是衡量因素。 活跃的社区为哪些地方地方和一些大数据出理 项目进行不断的创新,不断从对方的进步中受益。 亲戚亲戚朋友期待着扩大这一基准测试并测试哪些地方地方系统的新版本。

基准用的是典型Spark风格的DStreams。 DStreams是流数据,合适普通RDDs,并为每个微批次创建一另另有还还有一个单独的RDD。 注意,在时候 的讨论中,亲戚亲戚朋友使用术语“RDD”而时候“DSTREAM”来表示在当前活动micro batch中的RDD。 出理 直接使用Kafka Consumer 以及Spark1.5。 机会在亲戚亲戚朋友的基准中Kafka输入的数据被存储在还还有一个分区,Kafka消费者创建具有还还有一个分区的DSTREAM。 在此时候 ,一些变换施加在DStreams,包括maps 和 filters 涉及与Redis的交互数据的变换是有一种特殊状况,机会亲戚亲戚朋友让你每次记录Redis就创建一另另有还还有一个单独的连接,亲戚亲戚朋友使用一另另有还还有一个mapPartitions操作,都也能给RDD代码整个分区的控制权。 通过这一最好的辦法 ,亲戚亲戚朋友创建一另另有还还有一个连接到Redis的单一连接,并通过该连接从Redis中查询在RDD分区中的所有事件信息。 同样的最好的辦法 在时候 亲戚亲戚朋友往Redis写入最终结果的时候 使用。

亲戚亲戚朋友发现,Spark那么保持主足够的高吞吐量。 在每秒达到80000消息数率迟大大增加了。 亲戚亲戚朋友认为也能 沿着一另另有还还有一个方面进行调整,以帮助Spark应付增长的吞吐量。

应当指出的是,亲戚亲戚朋友的写入Redis的最好的辦法 被实现为RDD变换,以维持基准测试的简洁,我觉得 这不必与恰好一次的语义兼容。

更新:2015年12月18日一另另有有还还有一个沟通上的误解,亲戚亲戚朋友运行的Flink的测试代码时候checked in的代码。 现在调试代码机会删除。数据团队检查了代码,并证实它和目前的运行的测试是一致的。 亲戚亲戚朋友仍然会在某个时候 重新运行它。

在雅虎,亲戚亲戚朋友机会在一些日常使用中支持亲戚亲戚朋友的商业开源的大数据平台上投入巨资。 对于流工作负载,亲戚亲戚朋友的首选平台有还还有突然Apache的Storm,它取代了亲戚亲戚朋友的內部开发的S4平台。 亲戚亲戚朋友有还还有突然在广泛使用Storm,目前雅虎运行Storm节点的数量现在机会达到了280个(一些 还在不断增加中)。

该Flink版本的基准测试使用FlinkKafkaConsumer从Kafka读取数据。 数据在Kafka中是一另另有还还有一个JSON格式的字符串,一些 由一另另有还还有一个定制的flatMap operator 反序列化并解析。 一旦反序列化,数据通过自定义的过滤器过滤。 时候 ,经过滤的数据,通过使用project 投影(projected ) 从那里,将数据由自定义的flapMap函数产生Redis的数据,最终的数据计算结果写入Redis。

最时候说明的是,亲戚亲戚朋友试图在Spark1.5中引入的新背压(back pressure)功能。 机会系统是在第一工作区域,背压那么效果。 在第二操作区域,背压是因为更长的延迟。 第三操作区域结果显示背压带了副作用。 它改变了批次的长度,此时Spark出理 数率仍然跟不上, 示于下图。 亲戚亲戚朋友的测试表明,目前的背压功能并那么帮助亲戚亲戚朋友的基准,一些 亲戚亲戚朋友禁用了它。

该基准测试中, Flink 使用Java的DataStream的API实现。 该Flink的DataStream中的API和Storm的API有一些类式之处。 对于这有一种Flink和Storm,数据流都也能被表示为一另另有还还有一个有向图。 每个顶点是一另另有还还有一个用户定义的运算,每向边表示数据的流动。 Storm的API使用spout bolts 作为其运算器,而Flink使用map,flatMap,以及一些预建的operators ,如filter, project, 和 reduce Flink使用有一种叫做检查点,以保证出理 它提供类式Storm的ACKING担保机制。 亲戚亲戚朋友跑这一基准测试时Flink已默认关闭检查点。在Flink中值得注意的配置列表如下:

Storm 0.11.0同样遇到了瓶颈,直到亲戚亲戚朋友禁用ACKING。 在基准测试Topology中,ACKING用于流量控制而时候出理 担保。 在0.11.0中,Storm增加了一另另有还还有一个简单的背压控制,使亲戚亲戚朋友也能出理 ACKING的开销。 随着ACKING启用,0.11.0 版本在在80,000/s的吞吐量测试上 /比0.10.0 -稍好,但依然很糟糕。 随着ACKING被禁用,Storm在高吞吐量上比Flink的延迟性能要好。 不过注意的是,随着ACKING被禁用,报告和出理 的元组故障的功能也被禁用。

生产者创建含有创建时间戳标记的事件。 截断此时间戳到一另另有还还有一个特定的数字,这一特定的数字给出了时间窗口和事件所属的时候 开使时间 ,在Storm和Flink中,我觉得 更新Redis是定期的,但常常足以满足选定的SLA。 亲戚亲戚朋友的SLA为1秒,一些 亲戚亲戚朋友每秒一次往Redis写入更新的窗口。 Spark机会其设计的巨大差异,操作上略有不同, 一另另有有还还有一个关于在Spark每段的更多细节是亲戚亲戚朋友与数据同时记录时间,并在Redis中记录每个窗口的最后更新时间。

基准的任务是从Kafka读取各种JSON事件,选着 相关的事件,并存储每个campaigns活动相关的事件转加在Redis的时间窗口计数。 哪些地方地方步骤试着侦测数据流所进行的一些常用的操作。

延迟在所有Kafka 发射(emit)率是相对一致的。 守候时间线性上升,直到合适第99百分位数时(约1%的数据出理 时间),延迟有还还有突然冒出成倍的增加(1%的数据出理 延迟远远大于99%的数据)。

在该Kafka发出的数据事件到Flink基准数率从80,000个事件/秒到140万 次/秒变化。 对于每个Kafka发射(emit)率,Flink删改出理 元组的百分比与延迟时间的基准示于下图。

输入数据有以下模式:

除了对Storm进一步优化,亲戚亲戚朋友想扩大在功能方面的测试,并在测试中包括像Samza和Apex 等一些流出理 系统,未来也会把容错性,出理 担保和资源利用率作为测试的基准。

Kafka时候 开使基准测试时候被清空数据,Redis填充了初始数据(ad_idcampaign_id映射),流作业时候 开使时候守候一段时间,让工作完成启动,让生产者的生产活动稳定在一另另有还还有一个特定的数率,并获得所需的总吞吐量。 该系统在生产者被关闭时候 会运行80分钟。停止前允许有几秒钟的滞后以让流工作引擎出理 完所有事件。 基准测试工具运行会生成含有window.last_updated_at的列表的文件– window.timestamp数据。 哪些地方地方文件被保存为亲戚亲戚朋友测试各个引擎的吞吐量并用来生成这份测试报告中的图表。

最后的结果很有趣。 不同的窗口持续时间下Spark有有一种不同的结果。 首先,机会批出理 的窗口持续时间设定得足够大,大每段事件都将在当前微批出理 中完成出理 。 下图显示了这一状况下,得到百分比加工图(80K事件/10秒窗口持续时间)。

原文链接  译者:andy huang

摘要-机会严重不足真实世界的流基准测试,亲戚亲戚朋友1比较了Apache Flink,Apache Storm和 Apache Spark Streaming。 Storm 0.10.0/0.11.0-SNAPSHOT和 Flink 0.10.1 测试表明具有亚秒级的延迟和相对 较高的吞吐量, Storm 99%状况下具有最低的延迟。 Spark Streaming 1.5.1支持高吞吐量,一些 具有相对 较高的延迟。

吞吐量VS延迟曲线图在系统对比中差异我说是最明显的,机会它总结了亲戚亲戚朋友的研究结果。 Flink和Storm具有非常类式的性能,而Spark Streaming,也能 高得多的守候时间,但也能出理 更高的吞吐量。

window.final_event_latency =(window.last_updated_at – window.timestamp) – window.duration

90%的事件在第一另另有还还有一个微批出理 中被出理 ,这时候了改善延迟的机会性。 通过减少批出理 窗口持续时间,事件被安排至3到一另另有还还有一个批次进行出理 。 这带来了第还还有一个什么的问题,每批次的持续时间内无法出理 完所有安排到该时间窗口中的事件,但仍是可控的,更小的批出理 窗口持续时间带来了更低的延迟。这一状况示于下图(80K事件/3秒窗口持续时间)。

所哪些地方地方地方标准,除非另有说明, Storm,Spark,和Flink均采用默认设置进行,亲戚亲戚朋友专注于撰写正确的,容易理解,不必每次优化的,以充派发挥其潜力的方案。 机会这一每还还有一个步骤时候一另另有还还有一个单独的boltspout Flink和Spark的aggregation合并操作是自动的,但Storm(非trident)那么。 这是因为对Storm来说,事件经过更多的步骤,相比于一些系统具有更高的开销。

超过每秒138000的事件中不包括 Storm0.10.0和0.11.0在ACKING启用时的结果,机会亲戚亲戚朋友出理 数率无法跟上吞吐量。 由此产生的图形中Storm0.10.0 在48000毫秒时时候 开使测试, topology 跑的时间越长,得到越高的延迟,这表明它性能在降低。

(雅虎Storm团队排名不分先后) Sanket Chintapalli, Derek Dagit, Bobby Evans, Reza Farivar, Tom Graves, Mark Holderbaugh, Zhuo Liu, Kyle Nusbaum, Kishorkumar Patil, Boyang Jerry Peng and Paul Poulosky

下图比较这一另另有还还有一个系统的测试结果, 亲戚亲戚朋友都也能看出,Storm和Flink两者具有线性响应。 这是机会这一另另有还还有一个系统是一另另有还还有一个一另另有还还有一个的出理 传入事件。 另一方面,在Spark Streaming  最好的辦法 微批出理 设计, 出理 是逐步的最好的辦法 得到结果。

为了给亲戚亲戚朋友的內部客户提供最好的流计算引擎工具,亲戚亲戚朋友想知道Storm擅长哪些地方和它与一些系统相比哪些地方还也能 提高。 要做到这一点,亲戚亲戚朋友就时候 开使寻找哪些地方地方都也能为亲戚亲戚朋友提供流出理 基准测试的资料,但目前的资料时候一些基本领域有所严重不足。 首先,亲戚亲戚朋友那么任何接近真实世界的用例测试。 一些 ,亲戚亲戚朋友决定写一另另有还还有一个并将它开源https://github.com/yahoo/streaming-benchmarks。 在亲戚亲戚朋友的初步评估中,亲戚亲戚朋友决定在亲戚亲戚朋友的测试限制在一另另有还还有一个最流行的和有希望的平台(Storm,Flink和Spark),但对一些系统,也欢迎来稿,并扩大基准的范围。

机会在亲戚亲戚朋友的架构中,Redis的节点使用一另另有还还有一个精心优化的散列方案,仅执行内存查找,它从不必成为瓶颈。 节点被均匀配置,每一另另有还还有一个节点有一另另有还还有一个英特尔E5580 2.4GHz出理 器,总共16个核心(8物理核心,16超进程)每节点。 每个节点具有24GB的内存,机器都发生同一机架内,通过千兆以太网交换机相连。 集群共拥有40个节点。

Spark基准代码用Scala编写。 机会Spark的微批出理 最好的辦法 和Storm的纯流计算引擎性质不同,亲戚亲戚朋友也能 重新考虑基准实现的每段。 为了满足SLA, Storm和Flink每秒更新一次Redis,并在本地缓存中保留上端值。按此设计,Spark Streaming 的时间批次被设置为1秒,这会是因为较小的吞吐量,为此亲戚亲戚朋友不得不扩大批次的时间窗口以保证更大的吞吐量。