首页 > 解决方案 > 使用 Apache Beam 进行内存处理

问题描述

我正在运行我自己的 GRPC 服务器,收集来自各种数据源的事件。服务器是用 Go 开发的,所有事件源都以预定义的格式将事件作为 protobuf 消息发送。

我想做的是用内存中的 Apache Beam 处理所有这些事件。

我查看了 Apache Beam 的文档,但找不到可以执行我想要的操作的示例。我不会使用 Kafka、Flink 或任何其他流媒体平台,只是处理内存中的消息并输出结果。

有人可以告诉我开始编写简单的流处理应用程序的正确方法吗?

标签: goapache-beam

解决方案


好的,首先,Apache Beam 不是一个数据处理引擎,它是一个 SDK,它允许你创建一个统一的管道并在不同的引擎上运行它,比如 Spark、Flink、Google Dataflow 等。所以,运行一个 Beam 管道您将需要利用任何支持的数据处理引擎或使用DirectRunner,它将在本地运行您的管道,但是(!)它有很多限制,并且主要是为了测试目的而开发的。

与 Beam 中的每个管道一样,必须有一个源转换(有界或无界),它将从您的数据源中读取数据。我可以猜测,在您的情况下,您的 GRPC 服务器应该重新传输收集的事件。因此,对于源转换,您可以使用已经实现的Beam IO 转换(IO 连接器)或创建自己的转换,因为 Beam 中目前没有 GrpcIO 或类似的东西。

关于内存中的处理数据,我不确定我是否完全理解您的意思。它主要取决于使用的数据处理引擎,因为最终,您的 Beam 管道将在实际运行之前转换为例如 Spark 或 Flink 管道(如果您使用SparkRunnerFlinkRunner相应地),然后数据处理引擎将管理管道工作流。大多数现代引擎尽最大努力将所有处理过的数据保存在内存中,并仅在最后的手段将其刷新到磁盘上。


推荐阅读