将 BroadcastConnectedStream 连接到 AsyncIO



我需要让一个富含 AsyncIO 的函数根据最新的规则集执行调用。对于像map这样的操作,我能够通过以下博客文章处理具有丰富功能的BroadcastConnectedStream:https://flink.apache.org/2019/06/26/broadcast-state.html

但是,创建 AsyncIO 函数需要 DataStream 作为输入,而 BroadcastConnectedStream 不是 (https://ci.apache.org/projects/flink/flink-docs-stable/api/java/index.html?org/apache/flink/streaming/api/datastream/BroadcastConnectedStream.html(

有没有人对我如何解决此限制有任何想法?场景是,我希望一个异步函数将传入的消息隐藏在对外部世界的异步调用出现非暂时性错误时的状态,并在 kafka 上收到"继续"消息后恢复操作(我虽然我可以用广播流做到这一点(

我认为应该可以将 BroadcastProcessFunction(不是键控函数(放在异步 I/O 运算符前面,但您必须在你正在处理的其他流中联合,因为异步 I/O 只有一个输入。考虑到这是多么丑陋,找到其他方式来传达"继续"信号可能更可取。

或者,您可能想查看有状态函数,它在这方面具有更大的灵活性。

因此,首先,AsyncFunction不支持Keyed状态,因此您也必须解决此问题,并通过CheckpointedFunction自己实现这一点。

一般来说,我认为在这种情况下,没有任何开箱即用的东西。如果您想使用broadcast,我能想到的最好的主意是使用KeyedBroadcastProcessFunction沿流向下发出结果,然后使用 AsyncIO 函数。如果您实现了自己的状态处理,则可以保留所有失败的结果,只需重试即可。

但是,仅将所有请求作为列表获取并循环访问它们以重试可能不是最好的主意,因为这可能会导致性能下降(您可以设置应同时进行的请求数,但此请求实际上会比其他请求持续更长的时间(。

相关内容

  • 没有找到相关文章

最新更新