flink 写入hdfs 设置检查点不会滚
时间: 2023-07-07 08:40:12 浏览: 182
在Flink写入HDFS时,如果设置了`withBucketCheckInterval`参数,即检查点的时间间隔,那么在检查点触发时会将当前正在写入的文件刷入HDFS,并且不会滚动到下一个文件。
如果想要在检查点触发时将当前文件滚动到下一个文件,可以将`withBucketCheckInterval`参数的值设置得比`withRolloverInterval`小,例如:
```
DefaultRollingPolicy<String, String> defaultRollingPolicy = DefaultRollingPolicy.builder()
.withInactivityInterval(TimeUnit.SECONDS.toMillis(10))
.withRolloverInterval(TimeUnit.SECONDS.toMillis(30))
.withMaxPartSize(1024 * 1024 * 1024)
.build();
StreamingFileSink<String> sink = StreamingFileSink
.forRowFormat(new Path("hdfs://192.168.88.151:8020/user/hive/warehouse/basic.db/monitor_car_data/"), new SimpleStringEncoder<>("UTF-8"))
.withBucketAssigner(new DateTimeBucketAssigner<>("yyyyMMdd", ZoneId.of("Asia/Shanghai")))
.withRollingPolicy(defaultRollingPolicy)
.withBucketCheckInterval(10) // 设置检查点时间间隔为10s
.build();
```
这样,在检查点触发时,会将当前文件滚动到下一个文件,并将当前文件刷入HDFS。需要注意的是,设置检查点时间间隔过小会增加检查点的数量和写入HDFS的次数,可能会影响性能。
阅读全文