如何根据数据将一个数据流输出到不同的输出端口?

19
在Apache Flink中,我有一个元组流。假设是一个非常简单的Tuple1<String>。 元组的值字段可以有任意值(例如'P1'、'P2'等)。可能的取值集合是有限的,但我事先不知道完整的集合(所以可能会有'P362')。 我想根据元组内部的值将该元组写入特定的输出位置。例如,我想要以下文件结构:
  • /output/P1
  • /output/P2
在文档中,我只发现了一些已知写入目标位置的方法(例如stream.writeCsv("/output/somewhere")),但没有让数据内容决定最终位置的方法。
我在文档中阅读了关于数据输出分配的内容,但这似乎并不能提供我所需的将输出重定向到不同位置的方法(或者我不理解如何使用)。
是否可以使用FlinkAPI来实现此功能?如果可以,如何实现?如果不行,是否有第三方库可以实现,还是必须要自己构建这样的东西?

请勿在答案中添加解决方案。如果答案尚未提出,则可以在下面发布自己的答案。 - Jean-François Fabre
1个回答

7

您可以实现自定义的数据汇。继承以下其中一种:

  • org.apache.flink.streaming.api.functions.sink.SinkFunction
  • org.apache.flink.streaming.api.functions.sink.RichSinkFunction

在您的程序中使用:

stream.addSink(SinkFunction<T> sinkFunction);

不要使用 stream.writeCsv("/output/somewhere"),而是使用...


5
谢谢!我查看了FileSinkFunction的实现并自己想出了类似的东西。我将实现添加到了我的问题中以供参考。 - Jan Thomä

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接