go - 使用 Apache Beam 进行内存处理
问题描述
我正在运行我自己的 GRPC 服务器,收集来自各种数据源的事件。服务器是用 Go 开发的,所有事件源都以预定义的格式将事件作为 protobuf 消息发送。
我想做的是用内存中的 Apache Beam 处理所有这些事件。
我查看了 Apache Beam 的文档,但找不到可以执行我想要的操作的示例。我不会使用 Kafka、Flink 或任何其他流媒体平台,只是处理内存中的消息并输出结果。
有人可以告诉我开始编写简单的流处理应用程序的正确方法吗?
解决方案
好的,首先,Apache Beam 不是一个数据处理引擎,它是一个 SDK,它允许你创建一个统一的管道并在不同的引擎上运行它,比如 Spark、Flink、Google Dataflow 等。所以,运行一个 Beam 管道您将需要利用任何支持的数据处理引擎或使用DirectRunner
,它将在本地运行您的管道,但是(!)它有很多限制,并且主要是为了测试目的而开发的。
与 Beam 中的每个管道一样,必须有一个源转换(有界或无界),它将从您的数据源中读取数据。我可以猜测,在您的情况下,您的 GRPC 服务器应该重新传输收集的事件。因此,对于源转换,您可以使用已经实现的Beam IO 转换(IO 连接器)或创建自己的转换,因为 Beam 中目前没有 GrpcIO 或类似的东西。
关于内存中的处理数据,我不确定我是否完全理解您的意思。它主要取决于使用的数据处理引擎,因为最终,您的 Beam 管道将在实际运行之前转换为例如 Spark 或 Flink 管道(如果您使用SparkRunner
或FlinkRunner
相应地),然后数据处理引擎将管理管道工作流。大多数现代引擎尽最大努力将所有处理过的数据保存在内存中,并仅在最后的手段将其刷新到磁盘上。
推荐阅读
- sql - 如何使用最后一个字母数字键作为参考修剪数据
- php - Flashdata在codeigniter中不起作用
- javascript - 如何处理gmail弹出窗口?看截图
- angular - oncheckbox 检查事件使用角度 4 中的事件将数据从一个组件发送到另一个组件
- java - 我们不使用@override 注释会发生什么?
- node.js - 从 expressJs 发送其他域的文件
- javascript - 从 html 中的禁用属性获取值
- jenkins - 测试邮件正在工作,但是当我配置后构建电子邮件通知不起作用
- javascript - React.js 表单输入 onChange 与 getDerivedStateFromProps 有问题
- jquery - 通过 Ajax 提交表单时验证失败