• 最近访问:
发表于 2019-05-11 21:51:09 股吧网页版
华胜天成的GD公司:硅谷的GD公司在世界搜索引擎届名列前茅二

技术分享(2)In-Stream处理的工作原理

华胜天成 2017-07-19

上篇已经介绍了In-Stream处理中的一些概念,以及它如何适应大数据(Big Data)和快速数据(Fast Data)领域,接下来,本篇由华胜天成(上交所:600410)成员企业美国GD公司工程师Sergey Tryuber、Anton Ovchinnikov、Victoria Livschitz为大家详细解释In-Stream处理的工作原理。


In-Stream处理的服务架构


我们已经了解到In-Stream处理是将事件作为输入,然后产生一些结果,最后将该结果传递给其他系统的服务。

 

图1  典型的In-Stream处理架构


该架构由几部分组成:


?消息队列(Message queues)

消息队列捕获正进入的事件并充当缓冲区。

?In-Stream处理框架

In-Stream处理框架接收未处理的消息(或一个接一个,或几百个事件的微批),并将它们放入一个处理管道中。

?查找数据库

包含由In-Stream处理算法使用的一些简单数据结构,如参考数据。这些数据库访问足够快以致于每个事件上都能被查询。另一方面,它们的信息量相对较低。

?操作型存储

操作型存储将复杂数据结构传递给外部系统的In-Stream处理。它们还用于保留将用于处理未来事件的In-Stream处理的中间状态。此外,该数据库可以保存In-Stream处理管道的结果,例如来自点击流的更新的用户消息。

?结果

结果通过支持的API传递到目标点,如数据库,微服务和消息系统。这些事件也几乎总是加载到批处理系统的数据存储中,以进一步分析。


消息队列


消息队列为In-Stream处理提供了几个作用:它平滑了峰值负载;为所有事件提供持久存储;或者它可以允许几个独立的处理单元消耗相同的事件流。


由于消息队列最初从所有原始数据源收集事件,因此必须具有高性能,可扩展性和容错性。这就是为什么它通常运行在形成消息队列集群的几个专用服务器上。了解高可扩展性消息队列工作原理的主要概念是主题(Topics),分区(Partitions),生产者(Partitions)和消费者(Consumers)。


?主题(Topics)

主题是用于特定业务需求的事件逻辑流。单个消息列队可以同时服务许多主题。

?分区(Partitions)

分区是并行化的机制。主题分为多个分区,每个分区接收、存储和传递该主题的特定部分给它的消费者。任何分区都可以在集群中的任何节点上运行,从而达到几乎完美的可扩展性。

?生产者(Partitions)

生产者是产生与某些主题相关消息的数据源。生产者通过可分割的分区功能(如简单循环或散列分区)在分区之间分发事件。

?消费者(Consumers)

消费者是消息的最终接收者。在我们的用例下,消费者是In-Stream处理的框架。 

 

图2  消息队列的基本概念、并行化方法


事件排序仅在一个分区内保证。因此,原始事件流的正确分区设计对于消息排序很重要 的业务应用程序是至关重要的。


队列功能的另一个重要方面是可靠性。尽管遇到服务器故障或网络问题,消息队列仍然可供生产者和消费者使用,数据丢失风险最小。为了实现这一点,每个分区中的数据被复制到集群的多个节点,并且每分钟持续数次;见下图3。这些功能的高效架构设计对于保持消息队列性能非常重要。

 

图3 消息队列可靠性


过去消费者业务发生故障,可能需要重新处理已从队列中读取的数据。因此,从过去的某个时间点重播流的能力成为流处理服务中整体可靠性的一个重要组成部分。

 

图4 事件重读能力


In-Stream处理框架


In-Stream处理应用程序可以表示为一系列转换,如下图5所示。每个转换都要简单快捷。由于这些转换在管道中链接在一起,所以产生的算法是强大的,也是快速的。

 

图5 流处理应用程序作为转换序列


随着时间的推移,新的处理步骤可以添加到现有管道中,以便相对容易地改进算法,导致流应用的快速开发周期和流处理服务的可扩展性。


同时,转换必须有效地并行化,以便在集群中的不同节点上独立运行,从而实现大规模可扩展的设计。


为了确保这种高效并行化,流开发人员使用两个逻辑工具进行操作:分区(Partitions)和容器(Containers)。


?分区(Partitions)

分区已经在消息队列架构中讨论了。它们是原始输入流的一部分,已经被分割以进行并行处理。分区In-Stream处理应用程序必须正确完成,以避免分区之间的相互依赖关系,需要单个转换才能访问多个。

?容器(Containers)

容器封装了可以在集群上作为执行单元的一系列转换。一些容器接收初始数据流并产生临时数据流,而其他容器接收临时流并产生结果。

 

图6 流应用的并行化


开发人员需要定义并行化的逻辑模型,通过把计算分解为并行计算的步骤。该过程如上图所示。实际上,有时对于不同的容器需要重新排列不同分区中的流数据,这可以通过重新分区来完成。然而,开发人员需要注意的是:重新分区是一项昂贵的操作,可大大减慢管道线速度,应尽可能地避免或至少最小化。


一旦定义了模型,应用程序就是使用特定的In-Stream处理框架的API编写的,通常采用高级编写语言(如Java,Scala或Python)。流处理引擎将进行其余操作。


通过容器管理器的可扩展性和可用性


虽然市场上有许多不同的In-Stream处理引擎,但是它们大都遵循非常相似的设计和架构。通常,流集群由一个高度可用的容器管理器和许多工作节点组成。

容器根据资源可用性分配给节点,因此可能在任何可用节点上启动新的容器。如果节点出现故障,容器管理器将在可用节点上启动更多容器,并重新运行任何可能已丢失的事件。


一个流处理集群可以同时运行许多流应用程序是非常重要的。基本上,应用程序只是容器管理器的一组容器。更多的应用程序导致容器管理器提供更大的容器集。

 

图7 在同一个群集上执行多个流应用程序


机器学习


机器学习涉及“训练”算法,代表数据集“学习”正确的计算,称为模型(models)。模型的质量取决于训练数据集的质量和所选模型对用例的适用性。


机器学习的一般方法包括三个步骤:

?确定训练集和要训练的模型。这是数据科学家的工作。

?训练模型。这是机器学习算法的工作。

?使用经过训练的模型来执行分配的业务任务。


In-Stream处理可以使用经过训练的模型来获得洞察力。它很少用于训练过程本身,因为大多数训练算法在流式架构中表现不佳。有一些例外,例如在Spark流中的“k-means”聚类。


时间序列分析是机器学习的一个领域,而In-Stream处理对于时间序列分析是非常适合的,因为它是基于滑动窗口上的数据系列。必须仔细考虑的复杂因素是数据排序,因为流式传输框架通常不保证分区之间的顺序,而时间序列处理通常上对其敏感。

In-Stream机器学习是一个非常年轻但非常有希望的计算科学领域,已经受到研究界的广泛关注。很可能出现新的机器学习算法,可以通过流处理引擎有效运行。这将允许In-Stream系统在运行它们的同时,在同一机器上训练模型,并随着时间的推移改进它们。


数据摄取和数据丰富


数据摄取是将数据导入系统进行进一步处理的过程。数据丰富增加了简单的质量检查和数据转换,例如将IP地址转换为地理位置或者将用户代理HTTP标头转换为浏览网站时由访问者使用的操作系统和浏览器类型。历史上,数据首先加载到批处理系统中,然后进行转换。如今,越来越多的设计将数据摄取和数据丰富集成到一个In-Stream流程中,因为两点,一是丰富的数据可以被其他In-Stream应用程序使用;二是批处理分析系统的最终用户更快地看到即用型数据。


为下游系统提供成果


所有前述阶段的结果要么是从原始流中挑选出的可行的数据流(即洞察),要么是整个数据流,通过处理进行转换和丰富。正如我们已经讨论的,In-Stream处理服务是更广泛的大数据环境的一个组成部分。最后,它产生其他系统使用的数据。以下是需要不同接口来提供In-Stream处理服务结果的几种通用用例:


?关键洞察力

通过调用该应用程序公开的REST API,通常将罕见但有影响力的业务洞察(如潜在欺诈警报)传递到下游应用程序。

?洞察需求

识别的业务洞察存储在In-Stream处理服务的运营存储器中,可直接通过运营商或通过REST API向外部应用程序提供。一个很好的用例是电子商务系统,其中In-Stream处理不断更新基于点击流的用户个人资料,商业服务将提供个人优惠券或促销优惠。

?一步的In-Stream在线处理的数据采集

当结果输出也是另一个In-Stream处理系统的事件流时,消息队列(如Kafka)是连接两个系统的最佳方式。

?批量处理的数据采集

在大多数情况下,原始流将被转换,然后加载到Data Lake进行进一步的批处理。如果Data Lake和批处理技术基于Hadoop堆栈,HDFS是存储后处理事件的理想位置。

 

图8 常见的下游系统接口




郑重声明:用户在财富号/股吧/博客社区发表的所有信息(包括但不限于文字、视频、音频、数据及图表)仅代表个人观点,与本网站立场无关,不对您构成任何投资建议,据此操作风险自担。
作者:您目前是匿名发表   登录 | 5秒注册 作者:,欢迎留言 退出发表新主题
郑重声明:用户在社区发表的所有资料、言论等仅代表个人观点,与本网站立场无关,不对您构成任何投资建议。用户应基于自己的独立判断,自行决定证券投资并承担相应风险。《服务条款》《跟帖评论自律管理承诺书》

扫一扫下载APP

扫一扫下载APP
信息网络传播视听节目许可证:0908328号 经营证券期货业务许可证编号:913101046312860336 违法和不良信息举报:021-34289898 举报邮箱:[email protected]
沪ICP证:沪B2-20070217 网站备案号:沪ICP备05006054号-11 沪公网安备 31010402000120号 版权所有:东方财富网 意见与建议:021-54509966/021-24099099
香l港正版资料2019全年