StreamingFileSink压缩与合并小文件

本文介绍了Flink的StreamingFileSink在实时数仓中的应用,包括基本用法、文件压缩(如Parquet的SNAPPY压缩)、小文件处理策略(如减少并行度、增大checkpoint周期、下游任务合并处理)。重点关注了如何避免和处理小文件问题,以提高效率和降低成本。
摘要由CSDN通过智能技术生成

Flink目前对于外部Exactly-Once写支持提供了两种的sink,一个是Kafka-Sink,另一个是Hdfs-Sink,这两种sink实现的Exactly-Once都是基于Flink checkpoint提供的hook来实现的两阶段提交模式来保证的,主要应用在实时数仓、topic拆分、基于小时分析处理等场景下。本篇将会介绍StreamingFileSink的基本用法、如何压缩数据以及合并产生的小文件。

一、基本用法

StreamingFileSink提供了基于行、列两种文件写入格式,用法:

//行
StreamingFileSink.forRowFormat(new Path(path),
 new SimpleStringEncoder<T>())
.withBucketAssigner(new PaulAssigner<>()) //分桶策略
.withRollingPolicy(new PaulRollingPolicy<>()) //滚动策略
.withBucketCheckInterval(CHECK_INTERVAL) //检查周期
.build();


//列 parquet
StreamingFileSink.forBulkFormat(new Path(path),
 ParquetAvroWriters.forReflectRecord(clazz))
.withBucketAssigner(new PaulBucketAssigner<>())
.withBucketCheckInterval(CHECK_INTERVAL)
 .build();

这两种写入格式除了文件格式的不同,另外一个很重要的区别就是回滚策略

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值