文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

流数据处理可能会成为大数据领域的下一个重头戏,随着几个开源项目 Flink、Beam和 Apex打出的流处理引擎广告,我们决定进去一探究竟,为数据湖泊的用户测试一下它们。Flink似乎在这部分是最成熟的,刚刚发布了1.0.0版本。

用例

我们想流化股票价格,开发一个实时指标功能,然后报告给用户。在这种情况下,我们的指标采用5分钟移动平均价。不妨和现实世界的例子做个对照,有时这个价格被交易者们用来获得一种对安全的感觉,即当前价格是被低估还是高估的,尽管现实使用的时间间隔更大。

对多数经济分析而言,最大的障碍之一就是寻找免费的数据来源,幸运的是,谷歌给我们提供了一个每分钟都能安全获取到JSON格式的当前价格最新数据的URL网址。

第 1 段(可获 2.06 积分)

为什么不用Spark流处理?

以前的流处理框架和Spark流处理之间仿佛有一条线划清了两者的界限。Spark流处理在背后实际上只是一个批处理系统,看起来像是一个流处理系统而已,它创造了能够跨时间独立进行处理的“微批次”,使人有一种流处理的错觉。它的一个缺点是当对跨批次的数据做分析时,有时候分割这些跨批次的相关数据会造成问题。但是,对于和时间无关的用例,也许这根本就不是问题。

用批处理系统计算移动平均价时,如果其中一个价格由于某些原因延迟了,我们得出的那个时间帧的移动均价将会有轻微的倾斜。但是,使用一个真的流处理系统比如Flink,那么事件到达的顺序是没有影响的,因为它执行计算是基于事件时间进行的。

第 2 段(可获 1.81 积分)

管道

谷歌端有一个每分钟更新的JSON对象,提供了诸如股票价格、时间、成交量等属性,对我们来说,只需要股票价格和时间。在这点上,我们想把数据发给Flink则有好几种方式可选择,Flink有一些内建的“流连接器”,包括Kafka、Flume和Twitter,以及允许从特定端口接收数据。这次我们选择Kafka,不过另一个选择也可以是将新数据推给Netcat在特定端口上处理。

第 3 段(可获 1.24 积分)

Kafka会每分钟轮询一次谷歌端并读取JSON数据,拉取我们需要的字段,用逗号连接它们,并推送到一个主题上。对多支股票来说,我们可以为Kafka增加一个关键字用以区分主题,比如股票名称做关键字 (‘GOOG, ‘AAPL’等)。

Flink正在监控着Kafka的主题,一旦值被推入我们就能收到,然后开始使用它们。

Flink

FlinkBlog.png

上面这段Flink代码首先定义了一个Kafka流连接器,它可以让我们创建一个受Flink转换影响的Datastream对象。第一个转换将收到的记录分割为时间和价格,随后我们定义一个5分钟的时间窗,然后对窗口内的价格计数并取平均值,最后把平均值给用户。

第 4 段(可获 1.84 积分)

结论

上面的练习对于熟悉Flink的流处理机制是很有用的。在Zaloni公司,我们看到对于低延迟的处理那些不可控数据集的需求,这种商业案例的数字正在不断增长,我们期望看到流处理框架被更广泛的采用。成熟度,或者说框架不够成熟,也许过去会被批评,而如今似乎已不再是一个问题。

第 5 段(可获 0.88 积分)

文章评论

吉G过期罐头
很好