Flink Unit Test over ProcessWindowFunction<IN, OUT, KEY, W>

Posted

技术标签:

【中文标题】Flink Unit Test over ProcessWindowFunction<IN, OUT, KEY, W>【英文标题】: 【发布时间】:2020-08-13 18:24:34 【问题描述】:

如何为有状态流程函数创建单元测试。我有这样的事情:

 private static SingleOutputStreamOperator<Tuple> methodName(KeyedStream<Event, String> stream) 
        return stream.window(TumblingEventTimeWindows.of(Time.minutes(10)))
                .process(new ProcessFunction());
    

ProcessFunction extends ProcessWindowFunction<IN, OUT, KEY, W>

我在 Flink 页面中找到的所有 Harness 测试都是从 KeyedProcessFunction 扩展而来的,这不是我的情况。 谢谢。 亲切的问候!

【问题讨论】:

只是一个评论:因为 Flink 已经有一个名为 ProcessFunction 的公共类,如果你给你的类起一个不同的名字就不会那么混乱了。 嗨!你找到任何解决方案了吗?我找不到任何用于测试 ProcessWindowFunction. 的文档。 嗨@Vin。没什么人。 【参考方案1】:

通常,这些测试工具期望测试操作员,而不是用户功能。所以在ProcessWindowFunction的情况下,你需要首先创建一个合适的窗口操作符来传递给测试工具。

您可以使用OneInputStreamOperatorTestHarness 来测试ProcessWindowFunction,并在ProcessWindowFunction 周围包裹一个WindowOperator。恐怕这不是特别简单,但我可以向您推荐https://github.com/apache/flink/blob/release-1.11/flink-streaming-java/src/test/java/org/apache/flink/streaming/runtime/operators/windowing/WindowOperatorTest.java#L437 作为示例。

来自 Ververica 的 Apache Flink 培训课程涵盖了测试 (https://training.ververica.com/decks/testing),其中包含有关如何使用这些测试工具的更多信息。

【讨论】:

能否请您举一个简单、基本的测试 Flink 窗口功能的例子?特别是SlidingProcessingTimeWindows 函数。我查看了这些代码 sn-ps,但它们对我来说似乎相当复杂。我无法将它们应用到我的项目中。我还尝试使用自定义接收器对窗口功能进行单元测试,但在输出中没有得到任何结果。 Flink 文档中也没有任何关于测试窗口函数的内容。我在任何地方都找不到测试 Flink 窗口函数的非常基本的示例。

以上是关于Flink Unit Test over ProcessWindowFunction<IN, OUT, KEY, W>的主要内容,如果未能解决你的问题,请参考以下文章

flink笔记16 flink table windows(Group Windows/Over Windows)

flink笔记16 flink table windows(Group Windows/Over Windows)

flink笔记16 flink table windows(Group Windows/Over Windows)

Flink 极简教程: 架构及原理 Apache Flink® — Stateful Computations over Data Streams

Apache Flink®极简教程: 架构及原理 Stateful Computations over Data Streams

Flink扩展 Table/SQL Scalar 函数实现文档