复杂的 Flink 流式拓扑

问题描述 投票:0回答:1

我的用例有点独特,我需要一些帮助,看看我如何或是否可以通过 Flink 做到这一点。我有一个来自 Kafka 主题的数据流,其中有一个字段(例如用户 ID、事件 ID 等),我需要通过 RPC 查询其他目的地以检索其值,因此我可以加入他们写进水槽。

现在,Kafka 源很容易,因为 Flink 已经提供了从 Kafka 使用的 API 函数,但是,我的问题依赖于外部源。我考虑过为这些来源实现自定义来源,但如果没有来自 Kafka 消息的字段,我不知道要查询什么,所以这不太有意义。

除此之外,Kafka 消息可能包含大量重复数据,所以我也想缓存一些结果,这样我就不会重复调用。

最后,其他来源也需要一些速率限制功能,因为它们各自的服务可能无法处理令人难以置信的高流量。

在这种情况下,拓扑设计会是什么样子?我想过使用 KeyedProcessFunction 来处理消息,为它们的字段调用其他服务来存储值状态,但是我不太确定如何通过这种方法实现速率限制。

apache-flink flink-streaming system-design
1个回答
0
投票

通常你会使用 Flink 的 Async I/O 支持以多线程和非阻塞的方式查询外部系统。

结果的缓存有点棘手,因为你不能(轻松地)在 Flink 中进行迭代,这是让异步查询的结果在上游可用以在进行异步调用之前拆分现有结果所需要的.

您可以通过将异步调用的结果写入 Kafka 主题来模拟循环,并使用与传入数据流连接的相同主题作为输入来检测“足够新”的结果,以便何时可以避免调用.

© www.soinside.com 2019 - 2024. All rights reserved.