禁用检查点时,Flink StreamingFileSink无法提取到S3

时间:2019-05-27 16:05:19

标签: amazon-s3 apache-flink flink-streaming

我想使用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之间的关系。
谢谢

1 个答案:

答案 0 :(得分:0)

要启用StreamingFileSink,必须启用检查点。