使用流式文件接收器将测序计划数据写入文件

时间:2021-03-12 07:13:27

标签: apache-kafka apache-flink flink-streaming

我是 flink 程序员的新手。我想创建一个程序,用于从 kafka 获取数据并将数据写入文件以供下游使用。

任何人都知道如何定义自定义滚动策略以实现以下要点:

  1. 我需要在零件文件状态为 Finished 时指定文件名,或者以其他方式实现文件命名模式指定以完成滚动策略。例如文件名-[日期时间].txt
  2. 如何管理bucket..默认分配4个bucket。
  3. 当应用程序在那时重新启动时,未重用的部分文件不会被重用,而是会创建新的部分文件。
  4. 还要尽量避免文件覆盖问题。如果实现了第一点,那么这种情况可能永远不会发生。

我正在使用以下示例代码和 flink 流接收器链接。

final StreamingFileSink<String> sink = StreamingFileSink
                .forRowFormat(new Path(outputPath), new SimpleStringEncoder<String>("UTF-8"))                
                .withOutputFileConfig(new OutputFileConfig("Eventlog-",".txt"))
                .withBucketAssigner(new BasePathBucketAssigner<>())                
                .withRollingPolicy(
                        DefaultRollingPolicy.builder()
                                .withRolloverInterval(MINUTES.toMillis(15))
                                .withInactivityInterval(MINUTES.toMillis(5))
                                .withMaxPartSize(1024 * 1024 * 5)
                                .build())
                .build();

https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/connectors/streamfile_sink.html#row-encoded-formats

请在 flink 中提出更好的选择来实现上述目的。

0 个答案:

没有答案