通过阅读Google的Dataflow API,我给人的印象是它与Apache Storm的功能非常相似。通过流水线流程进行实时数据处理。除非我在这里完全没有指出要点,否则我期望与Google有所不同,而不是重新发明轮子,而不是为如何执行彼此编写的管道建立桥梁。 Apache Storm的位置已经很好,可以与任何编程语言一起使用。做这样的事情的真正值(value)是什么?
感谢您对Dataflow编程模型的关注!确实,Dataflow和Apache Storm都支持流处理,但是有一些重要的区别:
Dataflow在相同的“窗口” API下支持批处理和流计算,而据我所知,Storm专门是一种流系统。 在Dataflow和Storm中,用于定义计算拓扑的API截然不同。 Dataflow API在很大程度上模仿了FlumeJava:您像处理真实集合一样操作逻辑PCollection对象(并行集合;您可以将它们视为逻辑数据集),并根据将不同的可并行化操作(例如ParDo)应用于其他对象的结果来构建新集合集合。相反,在Apache Storm中,您可以直接从“喷嘴”和“ bolt ”构建计算网络。我没有意识到逻辑数据集或并行操作的明确概念。 Dataflow中管道的逻辑表示允许框架执行与数据库系统中查询优化器所完成的优化类似的优化,例如避免或引入某些中间结果的实现,四处移动或消除按组操作等。您可以在FlumeJava论文中查看这些优化的概述。这在批处理和流模式下都非常有用。 Dataflow和Storm的流计算模型之间的一致性保证是不同的。这实际上是一个有趣的话题!我建议阅读Millwheel论文(这是Dataflow的流式处理部分所基于的内容),以概述流式处理系统中的容错性和一致性。我相信这篇文章也将Millwheel和Storm进行了简要比较。您可以在Have Your Cake and Eat It Too -- Further Dispelling the Myths of the Lambda Architecture对话中找到有关流传输系统中一致性保证的重要性以及Dataflow给出的一致性功能的更广泛讨论。 作为Google Cloud Platform一部分的Dataflow的主要值(value)主张之一是零麻烦:您无需设置集群,无需设置监控系统等:您只需将管道提交给Cloud API然后系统为其分配资源,使用它们执行管道,并为您监视管道。但是,这可能与您关于编程模型的相似性的问题无关。