2021-08-31 FlinkSQL 文件滚动探究

Flink Sql的文件滚动的探究

背景

最近有一次在使用flink sql connector的过程当中,我们使用flink kafka connectorkafka中读取出来的数据存储到hdfs中,写到hdfsconnector 是使用flink自带的filesystem connector写到hdfs的文件系统当中。
在实际的使用当中,我们调整了如下参数

开始配置参数

auto-compaction = true
compaction.file-size = 128MB
sink.rolling-policy.file-size=128MB
sink.rolling-policy.rollover-interval = 1h
...

上述配置的预计是想让这个flink connector自动聚合,然后文件大小为128MB的时候滚动一下,或者在时间为一个小时的时候滚动一下文件。
但是在实践当中我们遇到了以下几个问题:

flink程序输出的文件没有被标记为finshed状态

在程序启动的时候,如果flink程序获取到了数据之后,然后向kafka输入的时候,flink程序生成的文件会有inprogress的字样。这样的文件会导致下游的程序无法正常的读取。

处理办法

在flink的程序当中,设置flink的checkpoint 当时我们将checkpoint配置后,发现文件能够从`inprogress`的状态,变为`finshed`的状态。 

Flink程序太多小文件

在解决了上述的问题之后,我们将flink的checkpoint的间隔时间调整为了10s,后来我们发现flink向hdfs写入的文件目录当中有太多的小文件。
这些文件并没有达到预期设置的阀值。

处理办法

通过查询源代码发现,这个auto-compaction这个参数,配置了之后,输出的文件状态有inprogress的状态变为finshed状态的时候,是checkpoint的控制的。就是每经过一次的checkpoint,就会将这个文件flush掉,然后将这inprogress状态的文件变为finshed的状态。
所以,我门后来取消掉了auto-compaction = true这个参数,发现文件合并的时候会安照我们预先设计的方案执行。

总结

本次经验分享写得很仓促,关于这块源码部分没有详细介绍。后续有时间的话,会有这方面的补充。如果各位大佬们有什么更好的看法与经验分享,请指点我一下,谢谢~

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值