数据流处理

8
我有一类计算需要使用图形结构来描述。这个图形结构非常复杂,有多个输入、分叉节点和需要其他多个节点结果的节点。在所有计算中,还可能存在多个汇点。但是,这个图不会出现任何环路。输入节点会被更新,值会通过(目前纯粹概念性的)图进行传递。节点保留状态,随着输入的变化而变化,计算必须按照输入的顺序进行。

由于经常需要编写这种计算,我不想每次都写临时代码,因此我尝试编写一个小型库,通过为各个顶点编写类来轻松组合这些计算。但是,我的代码相当不优雅,也没有利用这些计算的并行结构。虽然每个顶点通常都很轻巧,但计算可以变得相当复杂和“宽”。更加复杂的是,这些计算的输入在循环中非常频繁地更新。幸运的是,这些问题规模很小,我可以在单个节点上处理它们。

是否有人遇到过类似的情况?您会推荐哪些思路/方法/工具?

1个回答

2

Apache Storm:分布式硬件上可靠的实时流处理

这听起来似乎是Apache Storm(开源)非常适合的问题:http://storm.apache.org/

Apache Storm 是关于实时流计算的,它一次处理单个元组(数据点)。Storm 保证每个元组至少被处理一次。使用 Storm Trident,您可以进一步抽象 Storm 并获得精确一次的语义。

Apache Storm 是一个免费且开源的分布式实时计算系统。Storm 可以轻松地可靠地处理无限制的数据流,为实时处理做了 Hadoop 所做的批处理。

我和我的公司已经与 Apache Storm 合作了几年,它是最成熟的大数据技术之一。大数据技术是以水平分布的方式运行的技术(在廉价的商品硬件上)。

API 和文档

主要 API 是针对 Java 的,但有 Ruby、Python、Javascript、Perl 的适配器。但实际上您可以使用任何语言:http://storm.apache.org/about/multi-language.html

文档很好(尽管 JavaDoc 可以使用更多细节):http://storm.apache.org/documentation.html

基本思路 - Spouts 和 Bolts(=图形节点)

Apache Storm 中的 Spouts 和 Bolts

Storm 有 Spouts,您可以从中读取数据到所谓的拓扑结构中。拓扑结构即为您所描述的该图形。当新元组进入 Spouts 时,它们会通过拓扑结构发送。每个节点都是 Storm Bolts 中的一个。

用例

Storm 有许多用例:实时分析、在线机器学习、连续计算、分布式 RPC、ETL 等。Storm 是快速的:基准测试将其定时为每个节点每秒处理一百万个元组。它是可伸缩的、容错的、保证您的数据将被处理,并且易于设置和操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接