流处理引擎的并行行为

distributed-computing apache-storm apache-kafka distributed-system stream-processing

197 观看

2回复

149 作者的声誉

我一直在学习Storm和Samza,以了解流处理引擎如何工作,并意识到它们都是独立的应用程序,为了处理事件,我需要将它添加到也连接到流处理引擎的队列中。这意味着我需要将事件添加到队列(也是一个独立的应用程序,比如Kafka),Storm将从队列中选择事件并在工作进程中处理它。如果我有多个螺栓,每个螺栓将由不同的工作流程处理。(这是我不太了解的事情之一,我看到一家公司在生产中使用了20多个螺栓,并且每个事件都在特定路径中的螺栓之间传递)

但是我真的不明白为什么我需要这么复杂的系统。这些过程涉及过多的IO操作(我的程序 - >队列 - >风暴 - >>螺栓),它使控制和调试它们变得更加困难。

相反,如果我从Web服务器收集数据,为什么不使用相同的节点进行事件处理?这些操作已经由我用于Web服务器的负载均衡器分布在节点上。我可以在相同的JVM实例上创建执行程序,并将事件从Web服务器异步发送到执行程序,而不涉及任何额外的IO请求。我还可以在Web服务器中查看执行程序,并确保执行程序处理事件(至少一次或完全一次处理保证)。通过这种方式,管理我的应用程序将变得更加容易,并且由于不需要太多IO操作,与通过网络将数据发送到另一个节点的其他方式相比,它将更快(这也是不可靠的)并在该节点中处理它。

很可能我在这里遗漏了一些东西,因为我知道许多公司积极使用Storm,我知道很多人推荐使用Storm或其他流处理引擎进行实时事件处理,但我只是不明白。

作者: Boyolame 的来源 发布者: 2014 年 10 月 14 日

回应 (2)


3

3406 作者的声誉

决定

我的理解是,使用像Storm这样的框架的目的是从应用程序/ Web服务器卸载繁重的处理(无论是cpu绑定,I / O绑定还是两者)并保持响应。

考虑每个应用程序服务器可能必须提供大量并发请求,而不是所有这些请求都与流处理有关。如果应用服务器已经处理了大量事件,那么它可能构成较轻请求的瓶颈,因为服务器资源(认为CPU使用,内存,磁盘争用等)已经与更重的处理请求相关联。

如果您需要面对的实际负载不是那么重,或者只是通过添加应用服务器实例来处理,那么当然没有必要复杂化您的架构/拓扑,这实际上可能会减慢整个事情发生了。这实际上取决于您的性能和负载要求,以及您可以在问题上投入多少(虚拟)硬件。像往常一样,基于负载需求的基准测试将有助于决定采用哪种方式。

作者: Lolo 发布者: 15.10.2014 09:29

1

1097 作者的声誉

您认为通过网络发送数据将占用总处理时间的更多时间是正确的。但是,这些框架(Storm,Spark,Samza,Flink)是为处理大量可能不适合一台计算机内存的数据而创建的。因此,如果我们使用多台计算机来处理数据,我们就可以实现并行性。并且,关注网络延迟的问题。是! 这是一个需要考虑的权衡。开发人员必须知道他们正在实现在并行框架中部署的程序。他们构建应用程序的方式也会影响通过网络传输的数据量。

作者: Felipe 发布者: 29.06.2019 11:40
32x32