Flink Sql的文件滚动的探究
背景
最近有一次在使用flink sql connector
的过程当中,我们使用flink kafka connector
将kafka
中读取出来的数据存储到hdfs
中,写到hdfs
的connector
是使用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`的状态。