apache的工具类使用
在拥有数十亿个已连接设备的“永远在线”的未来中,存储原始数据以供以后分析将不是一种选择,因为用户需要实时的准确响应。 对故障和其他上下文相关条件的预测要求对数据进行实时处理-一定是在数据到达数据库之前。
只说“云将扩展”以满足实时处理流数据的需求是很诱人的,但是一些简单的示例表明,它永远无法满足对无限数据流进行实时响应的需求。 在这些情况下(从移动设备到IoT),需要一种新的范例。 尽管云计算依赖于“先存储再分析”的大数据方法,但迫切需要一种能够轻松处理无数,嘈杂和大量数据流的软件框架,以便它们能够实时响应,预测,或洞察力。
例如,与推特Firehose相比,加利福尼亚州帕洛阿尔托市每天从其交通基础设施中产生的流数据更多。 大量的数据。 为Uber,Lyft和FedEx等消费者预测城市交通量需要实时分析,学习和预测。 云中的事件处理导致不可避免的每事件大约半秒的延迟。
我们需要一个简单但功能强大的编程范例,该范例可让应用程序在以下和类似情况下即时处理无限的数据流:
- 数据量巨大,或者移动原始数据的成本很高。
- 数据由分布广泛的资产(例如移动设备)生成。
- 数据具有短暂的价值,分析迫不及待。
- 始终拥有最新的见解是至关重要的,而推断是不会做的。
发布和订阅
事件驱动系统领域中的关键架构模式是pub / sub或publish / subscribe消息传递的概念。 这是一种异步通信方法,其中消息从发布者 (产生数据的任何内容)传递到订阅者(处理数据的应用程序)。 发布/订阅可将任意数量的发件人与一组未知的使用者分离。
将 主题的事件发布给代理 , 代理将它们按接收顺序存储。 一个应用程序订阅一个或多个主题 ,并且代理转发匹配的事件。 Apache Kafka和Pulsar以及CNCF NATS是发布/订阅系统。 用于发布/订阅的云服务包括Google发布/订阅,AWS Kinesis,Azure服务总线,Confluent Cloud等。发布/订阅系统不运行订户应用程序,它们只是将数据传递给主题订户。
流数据通常包含事件,这些事件是对应用程序或基础结构状态的更新。 在选择用于处理数据的体系结构时,数据发布系统(例如pub / sub框架)的作用受到限制。 使用者应用程序的“方式”超出了pub / sub系统的范围。 这给开发人员管理留下了巨大的复杂性。 所谓的流处理器是一种特殊的订户,它可以动态分析数据并将结果返回给同一代理。
Apache Spark
Apache Spark是用于大规模数据处理的统一分析引擎。 通常,Apache Spark Streaming用作流处理器,例如,为机器学习模型提供新数据。 Spark Streaming将数据分成多个小批,每个小批均由Spark模型或其他系统独立分析。 事件流被分组为迷你批以进行分析,但是流处理器本身必须具有弹性:
- 流处理器必须能够随数据速率扩展,甚至可以跨服务器和云,并且还可以平衡实例之间的负载,以确保弹性和其他应用程序层需求。
- 它必须能够分析以不同速率报告的源中的数据,这意味着它必须是有状态的,或者将状态存储在数据库中。 当将Spark Streaming用作流处理器时,通常使用后一种方法,当需要超低延迟响应时,可能会导致性能问题。
一个相关的项目Apache Samza提供了一种方法,可以处理实时事件流,并使用Hadoop Yarn或Apache Mesos进行弹性伸缩来管理计算资源。
解决数据缩放问题
重要的是要注意,甚至Samza也无法完全缓解应用程序开发人员对数据处理的需求。 扩展数据速率意味着处理事件的任务需要在许多实例之间进行负载平衡,并且在实例之间共享所得到的应用程序层状态的唯一方法是使用数据库。 但是,在应用程序的任务之间的状态协调发展到数据库的那一刻,必然会对性能产生连锁React。 而且,数据库的选择至关重要。 随着系统的扩展,数据库的集群管理将成为下一个潜在的瓶颈。
这可以通过有状态,有弹性且可以代替流处理器使用的替代解决方案来解决。 在应用程序级别(在每个容器或实例内),这些解决方案通过流更新即时构建并发,互连的“ Web代理”的状态模型。 代理是并发的“纳米服务”,它们消耗单个来源的原始数据并维护其状态。 代理程序相互链接以根据数据中发现的源之间的真实关系(例如遏制性和邻近性)共享状态。 因此,代理形成并发服务的图,可以分析并发服务的状态以及它们链接到的代理的状态。 每个代理都为单个数据源提供纳米服务,该服务将从原始数据转换为状态,并根据其自身及其链接的子图的变化进行分析,学习和预测。
这些解决方案通过允许代理程序(现实世界中的数字双胞胎)可以广泛分布来简化应用程序体系结构,即使维护在应用程序层相互链接的分布式图形也是如此。 这是因为链接是映射到解决方案和代理本身的当前运行时执行实例的URL。 这样,应用程序可以无缝扩展实例,而无需担心DevOps。 代理消耗数据并维护状态。 他们还根据自己的状态以及其他代理的状态进行计算。 由于代理是有状态的,因此不需要数据库,并且洞察力以内存速度计算。
使用开源读取世界数据
我们查看数据的方式正在发生巨大的变化:现实世界不再是数据库作为记录系统,现实世界中的数字孪生可以连续传输其状态。 幸运的是,开源社区以丰富的用于处理实时事件的项目画布引领着这一潮流。 从pub / sub(最活跃的社区是Apache Kafka,Pulsar和CNCF NATS)到持续处理流数据的分析框架(包括Apache Spark, Flink , Beam ,Samza和Apache许可的SwimOS和Hazelcast) ,开发人员可以软件系统的最广泛选择。 具体而言,没有更丰富的专有软件框架集。 开发人员已经发言,软件的未来是开源的。
翻译自: https://opensource.com/article/20/2/real-time-data-processing
apache的工具类使用