我想使用aws s3作为flink中数据流的接收器。我正在使用StreamingFileSink类创建接收器。
我的工作不需要检查点,但是当我禁用检查点时,数据不再写入S3。
情况1:启用检查点功能
启用检查点功能后,数据将成功摄取到上述s3路径。
情况2:禁用检查点功能
禁用检查点功能时,不会将数据写入s3。
我尝试多次执行该作业,但是每次都得到相同的结果。我在本地机器以及kubernetes集群上都面临这个问题。
object FlinkTestJob {
def main(args: Array[String]): Unit = {
val env = StreamExecutionEnvironment.getExecutionEnvironment
// with checkpointing enabled
env.enableCheckpointing(100)
// Sinks
val streamStrings: Seq[String] =
Seq("test1", "test2", "test3", "test4", "test5", "test6", "test7", "test8", "test9", "test10")
val testStream = env.fromCollection(streamStrings)
val rollingPolicy = new RollingPolicy[String, String] {
override def shouldRollOnCheckpoint(partFileState: PartFileInfo[String]): Boolean =
partFileState.getSize > 1
override def shouldRollOnEvent(
partFileState: PartFileInfo[String],
element: String): Boolean = true
override def shouldRollOnProcessingTime(
partFileState: PartFileInfo[String],
currentTime: Long): Boolean = true
}
val sink: StreamingFileSink[String] = StreamingFileSink
.forRowFormat(new Path("s3a://testbucket/sink"), new SimpleStringEncoder[String]("UTF-8"))
.withRollingPolicy(rollingPolicy)
.build()
testStream.addSink(sink)
env.execute("test-job")
}
}
当我使用“ writeAsText(” s3a:// testbucket / sink“)”而不是StreamingFileSink写入s3时,无论是否启用检查点,它都可以正常工作。
链接版本:1.8.0
我想了解检查点和StreamingFileSink之间的关系。
谢谢
答案 0 :(得分:0)
要启用StreamingFileSink,必须启用检查点。