【问题标题】:Flink - asynchronous windowsFlink - 异步窗口
【发布时间】:2017-08-03 05:41:23
【问题描述】:

这是一个关于 flink 流的两个问题主题,基于我自己做的实验,我需要澄清一下。问题是:

  1. 当我们在 flink 的 KeyedStream 上使用 windows 时,apply 函数的计算是异步的吗?具体来说,flink 是否会为每个键创建单独的窗口,并相互独立地处理这些窗口?

  2. 假设我们在一个窗口流上使用 apply 函数(做一些计算),然后创建一个 DataStream。如果我们对生成的 DataStream 进行一些转换,flink 会将整个 WindowedStream 保存在内存中吗?并且 flink 会等到 WindowedStream 的所有 apply 函数都完成后再继续对结果流进行转换吗?

在我所做的所有实验中,我都使用了事件时间并从文件中读取数据。我在实验中观察到了上述陈述,我需要澄清一下。

【问题讨论】:

    标签: apache-flink flink-streaming


    【解决方案1】:

    广告。 1 是的,每个密钥都是独立处理的。这也是 windows 计算并行化的方式。

    Ad.2 Flink 将保持窗口状态,直到可以发出窗口(加上一些额外的时间,以防allowedLateness)。一旦窗口的结果被发出(在你的情况下被转发给下一个操作员),状态就可以被清除。

    【讨论】:

    • 感谢您的快速回复。如果数据量很大怎么办?这不会导致任何内存问题吗?另外,如果我们从套接字或 kafka 读取数据,在 aswer 2 上会发生同样的事情吗?
    • 数据的来源并不重要。从其他运营商的角度来看,它是透明的。至于状态的大小,我不太愿意谈论数字,但它可以处理非常大的数字。请记住,尽管它只会保留不关闭的窗口(例如,如果您的窗口非常长,可能跨越几天)。此外,通常您只存储窗口的聚合,而不是每个元素。
    猜你喜欢
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2018-06-02
    相关资源
    最近更新 更多