Apache Flink:使用来自 external/blocking 调用的数据丰富流
Apache Flink: Enrich stream with data from external/blocking call
在我的应用程序中,我想丰富无限的事件流。流本身通过 Id 的散列来并行化。对于每个事件,都可能调用外部源(例如 REST、DB)。这个调用本质上是阻塞的。必须维护一个流分区内的事件顺序。
我的想法是创建一个 RichMapFunction,它设置连接然后轮询每个事件的外部源。阻塞调用通常不会花费很长时间,但在最坏的情况下,服务可能会宕机。
从理论上讲,这是可行的,但我觉得这样做不太好,因为我不知道如果流中有一些阻塞操作,Flink 会如何反应。如果你有很多并行流阻塞会发生什么,即我 运行 没有线程了吗?或者在流被并行化的地方,行为是如何向上流的?
其他人是否有类似的问题和我的问题的答案或一些解决方法?
RichMapFunction
是一个很好的起点,但更喜欢 RichAsyncFunction
它是异步的并且不会阻止您的处理!
小心:
1- 您的数据库访问也是异步的
2- 您的活动顺序可能会改变(根据使用的模式)
更多详情:https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/stream/asyncio.html
希望对您有所帮助
在我的应用程序中,我想丰富无限的事件流。流本身通过 Id 的散列来并行化。对于每个事件,都可能调用外部源(例如 REST、DB)。这个调用本质上是阻塞的。必须维护一个流分区内的事件顺序。
我的想法是创建一个 RichMapFunction,它设置连接然后轮询每个事件的外部源。阻塞调用通常不会花费很长时间,但在最坏的情况下,服务可能会宕机。
从理论上讲,这是可行的,但我觉得这样做不太好,因为我不知道如果流中有一些阻塞操作,Flink 会如何反应。如果你有很多并行流阻塞会发生什么,即我 运行 没有线程了吗?或者在流被并行化的地方,行为是如何向上流的?
其他人是否有类似的问题和我的问题的答案或一些解决方法?
RichMapFunction
是一个很好的起点,但更喜欢 RichAsyncFunction
它是异步的并且不会阻止您的处理!
小心:
1- 您的数据库访问也是异步的
2- 您的活动顺序可能会改变(根据使用的模式)
更多详情:https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/stream/asyncio.html
希望对您有所帮助