基准结构化流在砖运行时对最先进的流媒体系统
更新12月14日,2017年:由于修复工具的数据生成器,Apache Flink 10个节点的集群上的表现,从多个核心集群6 x低于Apache火花3 x。这个配置不检查Apache Flink的文章。在大多数用例,您需要在集群环境中,运行流媒体应用程序而不是一台机器。同时,图片已经更新,以反映这些变化。
标杆管理是一个至关重要的和共同的过程来评估系统的性能。是什么让一个基准可靠是其重现性。许多现有的基准是很难复制几个原因:
- 用于特定的代码生成的结果不公开。
- 硬件用于生成特定的结果不容易或可用。
在砖,我们使用砖的笔记本和集群管理建立一个可再生的基准测试工具的性能比较Apache火花的结构化流上运行,砖统一分析平台bob体育亚洲版bob体育客户端下载,对其他开源的流媒体系统等bob下载地址Apache卡夫卡流和Apache Flink。特别是,我们使用以下系统和在我们的基准版本:
的雅虎流基准是一个著名的工业用基准评估流媒体系统。当设置基准,我们想把每个流媒体系统的绝对限制,然而保持雅虎的业务逻辑一样流基准。我们分享我们取得的一些结果从这些基准测试期间引发西2017年峰会主题表明火花可以达到4倍或更高的吞吐量在其他流行的流媒体系统。在这个博客中,我们详细讨论如何执行这一基准,以及如何复制自己的结果。
设置和配置
只需要点击几下命令,您可以运行所有这些系统并排砖社区版。所有您需要做的是:
如果你有一个砖企业订阅,您可以运行基准大规模使用额外的配置主要笔记本被注释掉了。
背景
原来的雅虎基准模拟一个简单的广告应用程序。广告事件流从卡夫卡消耗。我们的目标是计算事件时间窗口的数量的广告宣传”。“具体来说,操作的顺序是:
- 从卡夫卡读取JSON数据。输入数据有以下模式:
- user_id:UUID
- page_id:UUID
- ad_id:UUID
- ad_type:字符串{旗帜,模态、赞助的搜索、邮件、手机}
- event_type:{字符串视图中,点击,购买}
- event_time:时间戳
- ip_address:字符串
- 过滤事件我们感兴趣(视图)的基础上
event_type
场 - 投影的相关字段(
ad_id
和event_time
) - 加入每个事件的
ad_id
及其相关campaign_id
。该信息存储为一个静态表在复述。 - 视图/活动的窗口的计算和存储每个窗口在复述,连同一个时间窗口是最后更新的时间戳复述。这一步必须能够处理后期事件。
方法
我们想要确保系统基准测试的瓶颈,而不是一些互动与外部服务;因此,我们做了以下修改,是在完成的工匠在Flink公布的基准数据:
- 复述了为了不混淆加入性能。相反,我们用一个静态加入流表如下:
- 在卡夫卡流,我们从卡夫卡作为读取静态表
KTable
。我们确保静态表和事件流分区同样为了避免额外的洗牌在卡夫卡流。 - Flink不支持连接(1.2.1)版本中
数据流
与一个数据集
。因此,我们执行一个hashmap查找。在火花,我们加入一个静态局部数据集。
- 在卡夫卡流,我们从卡夫卡作为读取静态表
- 生成数据如下:
- 对于Flink和火花,我们生成的数据在内存中
- 卡夫卡流需要数据永久存储在卡夫卡,所以我们使用火花产生数据和卡夫卡写出来
- 数据写入卡夫卡代替复述。我们用卡夫卡时间戳来确定最后更新的时间戳的窗口。
- 我们也没有产生“后期数据”作为每个系统来处理数据
为了计算延迟,我们计算的时间戳收到最新的记录,对于一个给定的(竞选,event-time-window)在窗口的重要阶段。然后我们用这时间戳之间的区别和输出的卡夫卡摄入时间戳来计算延迟。
自动化吞吐量计算有点棘手。我们使用的方法如下:
- 火花,我们使用了
StreamingQueryListener
记录开始和结束时间戳和记录处理的数量。 - 我们将推出卡夫卡流在长时间运行的火星任务。后开始流,我们发送一个记录卡夫卡马克开始时间戳,我们发送记录的数量在每个任务处理流一旦停下来卡夫卡。然后我们的记录数的总和,最低开始时间戳,最大结束时间戳,然后记录的总和除以时间。
- 我们没有一个很好的方式来反省Flink自动工作,所以我们定期记录处理日志记录的数量。我们使用这个日志的开始和结束时间戳和总记录处理。这个计算近似,但尺度上的误差可以忽略我们的基准。
Apache火花和Flink与卡夫卡的结果
我们试图复制的性能结果Flink 15 M / s发表在记录这篇博客。我们能够实现数字记录16 M / s在砖使用商品云硬件(在AWS c3.2xlarge实例)。然而,我们注意到,我们可以达到16 M / s记录吞吐量Flink当我们生成的每一个广告活动,而不是10广告/活动。改变有多少广告/活动并不影响火花或卡夫卡流的性能,但导致Flink下降一个数量级的吞吐量。
最后的指标设置,我们在砖Community Edition的运行,我们发现火花的1.5倍比Flink吞吐量:
一旦我们跑的基准为每个系统规模(10工作节点),我们观察到以下结果:
回顾一下,我们雅虎流基准比较Apache火花对砖的结构化流运行时对其他开源流引擎:Apache Flink和Apache卡夫卡流。我们的结果表明,火花可以达到2.9倍或更高的吞吐量。可再生的实验的精神和方法论,我们发表了对你所有的脚本复制这些基准。
我们期待着听到您的反馈!请提交问题给我们基准GitHub库