复杂的Flink流拓扑

fdbelqdn  于 2023-05-12  发布在  Apache
关注(0)|答案(1)|浏览(141)

我的用例有点独特,我需要一些帮助来看看如何或是否可以通过Flink做到这一点。我有一个来自Kafka主题的数据流,其中有一个字段(例如:用户ID、事件ID等),我需要通过RPC查询其他目的地来检索其值,这样我就可以连接它们并写入接收器。
现在,Kafka源代码很容易,因为Flink已经提供了从Kafka使用的API函数,然而,我的问题依赖于外部源代码。我曾经想过为这些源代码实现一个自定义源代码,但是如果没有Kafka消息中的字段,我就不知道要查询什么,所以这没有什么意义。
除此之外,Kafka消息可能包含大量重复数据,所以我还想缓存一些结果,这样我就不会进行重复调用。
最后,在其他源上也期望一些速率限制特征,因为它们各自的服务可能无法处理难以置信的高业务。
在这种情况下,拓扑设计会是什么样子?我已经考虑过使用KeyedProcessFunction来处理消息,调用其他服务,因为它们的字段存储值状态,但是我不太确定如何通过这种方法实现速率限制。

xqnpmsa8

xqnpmsa81#

通常情况下,您会使用Flink的Async I/O支持以多线程和非阻塞的方式查询外部系统。
结果的缓存有点棘手,因为你不能(轻松地)在Flink中进行迭代,这是在进行异步调用之前将异步查询的结果在上游分离现有结果所需要的。
你可以通过将异步调用的结果写入Kafka主题来模拟一个循环,并将相同的主题作为你与传入数据流连接的输入,以检测“足够近”的结果,以便在你可以避免调用的时候。

相关问题