Apache Beam 架构原理及应用实践( 三 )


.commitOffsetsInFinalize()
⑨ 设置是否返回 Kafka 的其他数据,例如 offset 信息和分区信息,不用可以去掉 。
.withoutMetadata() // PCollection<KV<Long, String>>
⑩ 设置只返回 values 值,不用返回 key 。例如 PCollection,而不是 PCollection<Long,String> 。
.apply(Values.<String>create()) // PCollection<String>
在写入 Kafka 时完全一次性地提供语义,这使得应用程序能够在 Beam 管道中的一次性语义之上提供端到端的一次性保证 。它确保写入接收器的记录仅在 Kafka 上提交一次,即使在管道执行期间重试某些处理也是如此 。重试通常在应用程序重新启动时发生(如在故障恢复中)或者在重新分配任务时(如在自动缩放事件中) 。Flink runner 通常为流水线的结果提供精确一次的语义,但不提供变换中用户代码的副作用 。如果诸如 Kafka 接收器之类的转换写入外部系统,则这些写入可能会多次发生 。
在此处启用 EOS 时,接收器转换将兼容的 Beam Runners 中的检查点语义与 Kafka 中的事务联系起来,以确保只写入一次记录 。由于实现依赖于 runners checkpoint 语义,因此并非所有 runners 都兼容 。Beam 中 FlinkRunner 针对 Kafka 0.11+ 版本才支持,然而 Dataflow runner 和 Spark runner 如果操作 kafkaIO 是完全支持的 。
关于性能的注意事项:
"Exactly-once" 在接收初始消息的时候,除了将原来的数据进行格式化转换外,还经历了 2 个序列化 - 反序列化循环 。根据序列化的数量和成本,CPU 可能会涨的很明显 。通过写入二进制格式数据(即在写入 Kafka 接收器之前将数据序列化为二进制数据)可以降低 CPU 成本 。
5. Pipeline

Apache Beam 架构原理及应用实践

文章插图
  • 您输入的数据存储在哪里?
首先要确定你要构造几条数据源,在 Beam 可以构建多条,构建之前可以选择自己的 SDK 的 IO 。
  • 您的数据类型是什么样的?
Beam 提供的是键值对的数据类型,你的数据可能是日志文本,格式化设备事件,数据库的行,所以在 PCollection 就应该确定数据集的类型 。
  • 您想怎么去处理数据?
对数据进行转换,过滤处理,窗口计算,SQL 处理等 。在管道中提供了通用的 ParDo 转换类,算子计算以及 BeamSQL 等操作 。
  • 您打算把数据最后输出到哪里去?
在管道末尾进行 Write 操作,把数据最后写入您自己想存放或最后流向的地方 。
Apache Beam 架构原理及应用实践

文章插图
重要的是要理解变换不消耗 PCollections;相反,他们会考虑 a 的每个元素 PCollection 并创建一个新 PCollection 的输出 。这样,您可以对不同的元素执行不同的操作 PCollection 。这里是出现了两条管,例如输入 AR,AI,VAR,BT,BMP 。
Apache Beam 架构原理及应用实践

文章插图
例如不同的数据源,有数据库,文件,以及缓存等输入进行合并 。
Apache Beam 架构原理及应用实践

文章插图
一种是收费的拓蓝公司出品叫 Talend Big Data Studio,有没有免费的呢?
Apache Beam 架构原理及应用实践

文章插图
有的,它叫 kettle-beam 。例如不同的数据源,有数据库,文件,以及缓存等输入进行合并 。大家可以去 github 去看一下插件相应的安装及使用说明 。从图中可以看出大部分 beam 的输入输出现在都是支持的 。
https://github.com/mattcasters/kettle-beam
6. Runners
Apache Beam 架构原理及应用实践

文章插图
我们在看一下运行平台,这是运行平台支持度的截图 。例如不同的数据源,有数据库,文件,以及缓存等输入进行合并 。
Runners 在 Beam Model 模型中有4个支持的维度: