我有一个用例,我在flink中使用异步IO操作符和正常映射器。我使用flink 1.8。async操作符必须在操作符链的顶端。所以我的操作符是这样的:
源→Mapper1→AsyncOperator→Mapper2→水槽
由于要求异步操作符为头,因此有两个操作符链,因此有两个任务- 1。Source + Mapper1AsyncOperator + Mapper2 +下沉。我对第二链有疑问。我认为第二个链应该包含在一个单一的任务,如果他们正确链接。我不确定任务线程上的异步操作符和mapper 2之间是否有等待时间,或者Mapper2是否被绑定到内部异步操作符的响应处理程序?理想情况下,它应该排在第二位,但我找不到任何相同的文档-因此想知道。
参考:
- https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/asyncio.html
AsyncWaitOperator
在线程中启动Emitter
,因此一旦结果可用,它们就被发送到操作符的收集器。但请注意,如果指定的是有序结果,则可以设置"等待时间"。由于补全顺序与输入元素的顺序不匹配。
顺便说一句,在Flink 1.11中取消了AsyncWaitOperator必须位于链头的限制。看到flink - 16219。唯一剩下的限制是它不能跟随SourceFunction。AsyncWaitOperator可以遵循Flink 1.12中引入的新源。