背景
项目中有一个多进程的任务,需要读取 kafka ,对象我们叫他 T, kafka 是T的PB格式, T有KEY 。 任务的目的是将T 专程JSON 交给下游的分析引擎分析。 每天T 的量有几亿条~
Flink 的版本是 1.12.1 。
特点
T 是在 OpenRTB 中记录整个过程的Transaction,同时T 有可能在 transient 状态,是不完整的,所以要判断当前要 emit 的T 是否是完整的,不完整的直接 filter 掉
Flink 改写
flink kafka connector 接入 kafka 对应的 topic ,配置 KafkaProducer 等,这个暂且不表,之前的文章讲过。这里主要讲一下 Flink 的 file sink
FileFormat
#首先是FileFormat ,File sink 里边详细分为 Row-encoded Formats 和 Bulk-encoded Formats 。
##Row-encoded Formats 就是具体执行写入 文件系统的writer 需要用它来编码,例子中最简单的就是 SimpleStringEncoder ,我们这里也是用的这个encoder ,因为在数据转换的时候在算子里边已经把 pb 转化成了 json 字符串了~
final FileSink<String> sink = FileSink
.forRowFormat(new Path(outputPath), new SimpleStringEncoder<String>("UTF-8"))
## Bulk-encoded Formats 我理解有一些时候成批次的写不等价于 单条写,譬如 parquet , orc 等列式存储结构,批次的大小对于整个文件结构和查询使用性能影响很大,之前做OLAP分析的时候把MONGO数据读出,变形,写出到parquet 中就是用的bulk encoded format 。
官方说明的支持的几种类型
Flink comes with four built-in BulkWriter factories:

本文介绍了在Flink 1.12.1中使用FileSink处理多进程任务,涉及FileFormat的选择,如Row-encoded Formats和Bulk-encoded Formats,以及BucketAssignment策略,包括DateTimeBucketAssigner和BasePathBucketAssigner。文章还讨论了RollingPolicy的DefaultRollingPolicy和OnCheckpointRollingPolicy,并提到在S3上配置Flink的挑战,如添加插件和配置访问密钥。
最低0.47元/天 解锁文章
1390

被折叠的 条评论
为什么被折叠?



