【问题标题】:Splitting a stream in Flink在 Flink 中拆分流
【发布时间】:2020-02-25 22:19:42
【问题描述】:

如果我想在 Flink 中拆分流,最好的方法是什么?

我可以使用进程函数并通过使用侧输出来拆分流。水印是否与元素一起传递到侧面输出,以便每个侧面输出中的数据可以向下游传递给其他窗口运算符?

或者,我应该只使用多个 filter() 操作将一个流过滤成多个流,每个流都包含一个元素的子集吗?在这种情况下如何处理水印?是否所有水印都传递给所有过滤的流?

如果两者都可能,哪个是首选(哪个具有更好的性能)?或者有比上述任何一个选项更好的方法吗?

【问题讨论】:

  • 您能详细介绍一下您的用例吗?
  • 我有两个用例:(1)有时传入的流包含完全不同类型的对象,我需要在 Flink 中创建两个 DataStream,其中 A 类型的对象在一个流中,类型的对象B 在另一个流中。 (2) 在我的另一个用例中,对象都是相同的数据类型,我需要根据对象中特定字段的值来拆分流。

标签: apache-flink flink-streaming


【解决方案1】:

侧输出通常是拆分流的首选方式。它们的优点是能够将流 n 路拆分为不同类型的流,并且性能出色。

还有另一种您未提及的拆分流的方法,即通过拆分和选择。不推荐拆分/选择。实现有点像 hack,性能也没有那么好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2019-08-17
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多