常常听到的流处理是什么?

2018-12-24 14:38:05 浏览数 (2)

什么是流处理?

流处理是一种允许用户在接收到的数据后的短时间内快速查询连续数据流和检测条件的技术。检测时间从几毫秒到几分钟不等。

例如,通过流处理,您可以查询来自温度传感器的数据流,并在温度达到冰点时接收警报。

它也被诸如实时分析,流式分析,复杂事件处理,实时流式分析和事件处理等名称所调用。 尽管历史上有些术语存在差异,但现在,工具已经在术语流处理下趋于一致。

它是大数据技术之一。 它被Apache Storm推广,现在有很多竞争者。

为什么需要流处理?

大数据确立了从处理数据中得出的洞察力的价值。这种洞察力的价值并不相等。一些洞察力在事情发生后不久就有了更高的价值,而且这种价值会随着时间的推移而迅速减少。流处理针对这样的场景。流处理的关键优势在于它能够更快地提供洞察力,通常在毫秒到秒之间。

流处理作为Hadoop这样的技术被引入和推广,但是可以更快地给你结果。

以下是使用流处理的一些次要原因。

一些数据自然会成为一个永无止境的事件流。 要进行批处理,您需要存储它,在某个时间停止数据收集,并处理数据。 然后,你必须做下一批,然后担心跨多个批次的聚合。 相比之下,流处理方式自然而然地处理无数数据流。 您可以检测模式,检查结果,查看多个焦点级别,还可以同时轻松查看多个数据流中的数据。

流处理自然适合时间序列数据和检测模式随时间推移。例如,如果您试图在一个永无止境的流中检测web会话的长度(这是尝试检测序列的一个例子),那么使用批处理是非常困难的,因为有些会话将分为两个批。流处理可以轻松地处理这一问题。如果你退一步想想,最连续的数据序列是时间序列数据。例如,几乎所有物联网数据都是时间序列数据。因此,使用自然适合的编程模型是有意义的。

批处理让数据建立起来并尝试一次处理它们,而数据流处理则在数据进入时对其进行处理,从而随着时间推移处理数据。 因此,流处理可以比批处理少硬件。 此外,流处理还可以通过系统减载实现近似的查询处理。 因此,流处理自然适合用于近似回答充分的用例。

有时候,数据是巨大的,甚至不可能存储它。 流处理可让您处理大型火马式数据并仅保留有用位。

最后,有大量流数据可用(例如,客户交易,活动,网站访问),并且随着物联网用例(所有类型的传感器),它们的增长速度会更快。 流式传输是一种更加自然的模型,可以考虑并编写这些用例。

但是,流式传输也不是所有用例的工具。 一个很好的经验法则是,如果处理需要通过完整数据的多次传递或具有随机访问(想象一个图形数据集),那么在流式传输中就很棘手。 流媒体中的一个大缺失用例是机器学习算法来训练模型。 另一方面,如果处理可以通过一次数据处理完成,或者具有时间局部性(处理倾向于访问最近的数据),那么它非常适合流式传输。

如何进行流处理?

如果你想构建一个处理流数据并作出实时决策的应用程序,你可以使用一个工具或自己构建它。 答案取决于您计划处理多少复杂性,需要扩展多少,需要多少可靠性和容错能力等。

如果您想自己构建应用程序,请将事件置于消息代理主题(例如ActiveMQ,RabbitMQ或Kafka)中,编写代码以接收代理中主题的事件(它们将成为您的流),然后将结果发布回经纪人。 这样的代码被称为参与者。

但是,您可以使用流处理器来节省时间,而不是从头开始编写上述场景。 事件流处理器可让您为每个参与者编写逻辑,连接参与者,并将边缘连接到数据源。您可以直接将事件发送到流处理器,也可以通过代理发送它们。

事件流处理器将为收集数据付出艰辛的努力,将其交付给每个参与者,确保它们以正确的顺序运行,收集结果,如果负载很高则进行扩展并处理失败。 其中的例子有Storm,Flink和Samza。 如果您想以这种方式构建应用程序,请查看相应的用户指南。

自2016年以来,出现了一个名为Streaming SQL的新概念。我们称之为一种语言, 使用户能够编写 sql (如查询) 来查询流式数据流 sql 语言。

诸如WSO2 Stream Processor和SQLStreams之类的项目已经支持SQL五年多了。

Apache Storm在2016年增加了对Streaming SQL的支持。

Apache Flink在2016年增加了对Streaming SQL的支持。

Apache Kafka在2017年加入了对SQL(他们称为KSQL)的支持。

Apache Samza在2017年增加了对SQL的支持。

借助流式SQL语言,开发人员可以快速将流式查询合并到其应用程序中。 到2018年,大多数Stream处理器都支持通过Streaming SQL语言处理数据。

让我们了解SQL是如何映射到流的。流是移动中的表数据。想想一个永无止境的表,新的数据会随着时间的推移而出现。流就是这样一个表。流中的一个记录或一行称为事件。但是它有一个模式,其行为就像数据库行一样。为了理解这些想法,Tyler Akidau 在 Strata的演讲是一个很好的资源。

关于SQL流,首先要了解的是它用流替换表。

当你编写SQL查询时,你可以查询存储在数据库中的数据。 但是,当您编写Streaming SQL查询时,您可以将它们写入现在的数据以及将来的数据。 因此,流SQL查询永远不会结束。 这不是问题吗? 否:这是因为这些查询的输出是流。 一旦事件匹配并且输出事件立即可用,事件将被放置在输出流中。

流表示可以通过逻辑通道传输的所有事件,并且它永远不会结束。 例如,如果我们在锅炉中安装温度传感器,我们可以将传感器的输出表示为流。 但是,传统的SQL摄取存储在数据库表中的数据,对其进行处理,并将它们写入数据库表。 相反,上述查询会在数据流进入时产生一串数据,并产生一个数据流作为输出。 例如,假设每十分钟有一次锅炉流中发生事件。 过滤器查询将在事件与过滤器匹配时立即在结果流中生成事件。

因此,您可以按照以下步骤构建您的应用。 通过直接发送或通过代理发送事件到流处理器。 然后,您可以使用Streaming SQL编写应用程序的流式部分。 最后,将流处理器配置为对结果执行操作。 这可以通过在Stream Processor触发时调用服务或将事件发布到代理主题并聆听该主题来完成。

有许多流处理器可用。WSO2流处理器(WSO2 SP), 它可以从Kafka,HTTP请求和消息代理中获取数据,并且可以使用Streaming SQL语言查询数据流。 WSO2 SP是Apache许可下的开源代码。 只有两台商品服务器,它可以提供高可用性,并且可以处理100K TPS吞吐量。 它可以在Kafka之上扩展到数百万TPS。

谁正在使用流处理?

一般来说,流处理对于使用情况非常有用,我们可以检测到问题并且我们有合理的响应来改进结果。 此外,它在数据驱动的组织中扮演着关键角色。

以下是一些用例。

  • 算法交易,股市监控
  • 智能患者护理
  • 监控生产线
  • 供应链优化
  • 入侵,监视和欺诈检测(例如Uber)
  • 大多数智能设备应用(例如智能汽车.....这个名单还在继续)
  • 智能电网(例如,负载预测和异常值插件检测参见智能电网,总计100K范围内有40亿次事件)
  • 地理围栏,车辆和野生动物追踪(例如伦敦TFL)
  • 运动分析:通过实时分析增强体育运动(这是我们在真正的足球比赛中所做的工作)
  • 上下文感知促销和广告
  • 计算机系统和网络监控
  • 交通监控
  • 预测性维护
  • 地理空间数据处理
  • 我希望这是有用的。
es2

0 人点赞