使用 Apache Beam 在内存中处理
In memory processing with Apache Beam
我是 运行 我自己的 GRPC 服务器,收集来自各种数据源的事件。服务器是用 Go 开发的,所有事件源都以预定义的格式作为 protobuf 消息发送事件。
我想做的是用内存中的 Apache Beam 处理所有这些事件。
我查看了 Apache Beam 的文档,但找不到可以执行我想要的操作的示例。我不会使用 Kafka、Flink 或任何其他流媒体平台,只是在内存中处理消息并输出结果。
谁能告诉我开始编写简单的流处理应用程序的正确方法的方向?
好的,首先,Apache Beam 不是数据处理引擎,它是一个 SDK,允许您创建统一的管道,运行 它可以在不同的引擎上使用,例如 Spark、Flink、Google 数据流等。因此,对于 运行 Beam 管道,您需要利用任何支持的数据处理引擎或使用 DirectRunner
,这将 运行 您的管道在本地但是(!)它有很多限制,主要是为了测试目的而开发的。
由于 Beam 中的每个管道,都必须有一个源转换(有界或无界),它将从您的数据源读取数据。我可以猜测,在您的情况下,您的 GRPC 服务器应该重新传输收集的事件。因此,对于源转换,您可以使用已经实现的 Beam IO transforms(IO 连接器)或创建您自己的,因为 Beam 中目前没有 GrpcIO 或类似的东西。
关于在内存中处理数据,我不确定我是否完全理解你的意思。它主要取决于使用的数据处理引擎,因为最终,您的 Beam 管道将在实际 运行ning 然后数据处理引擎将管理管道工作流。大多数现代引擎都尽最大努力将所有处理过的数据保存在内存中,只有在不得已的情况下才将其刷新到磁盘上。
我是 运行 我自己的 GRPC 服务器,收集来自各种数据源的事件。服务器是用 Go 开发的,所有事件源都以预定义的格式作为 protobuf 消息发送事件。
我想做的是用内存中的 Apache Beam 处理所有这些事件。
我查看了 Apache Beam 的文档,但找不到可以执行我想要的操作的示例。我不会使用 Kafka、Flink 或任何其他流媒体平台,只是在内存中处理消息并输出结果。
谁能告诉我开始编写简单的流处理应用程序的正确方法的方向?
好的,首先,Apache Beam 不是数据处理引擎,它是一个 SDK,允许您创建统一的管道,运行 它可以在不同的引擎上使用,例如 Spark、Flink、Google 数据流等。因此,对于 运行 Beam 管道,您需要利用任何支持的数据处理引擎或使用 DirectRunner
,这将 运行 您的管道在本地但是(!)它有很多限制,主要是为了测试目的而开发的。
由于 Beam 中的每个管道,都必须有一个源转换(有界或无界),它将从您的数据源读取数据。我可以猜测,在您的情况下,您的 GRPC 服务器应该重新传输收集的事件。因此,对于源转换,您可以使用已经实现的 Beam IO transforms(IO 连接器)或创建您自己的,因为 Beam 中目前没有 GrpcIO 或类似的东西。
关于在内存中处理数据,我不确定我是否完全理解你的意思。它主要取决于使用的数据处理引擎,因为最终,您的 Beam 管道将在实际 运行ning 然后数据处理引擎将管理管道工作流。大多数现代引擎都尽最大努力将所有处理过的数据保存在内存中,只有在不得已的情况下才将其刷新到磁盘上。