Flink流加入一个可能返回大量结果的维度表。

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

我有一个事件流,需要丰富订阅信息。有些事件是广播事件,也就是说当收到这样的事件时,我需要去数据库表中,找到该事件的所有订阅者,在我的用例中可以是10000行,然后将单个广播事件转化为10000个通知事件。对于普通的事件类型,有额外的user_id键可以用来加入订阅表,不存在这个问题。

面临的挑战是

  • 如何加入一个大的ResultSet,将它们返回到内存中,这似乎不是一个可扩展的解决方案。有没有办法将其分割成许多小的并行任务?
  • 如何组织处理管道,使正常事件和广播事件互不干扰。我不希望连续长时间运行的广播事件阻塞正常事件的处理流水线。

我刚刚开始使用Flink,对于这个用例,什么是正确的或性能良好的架构?如果需要的话,可以将广播事件类型和正常事件类型分成两个源。

apache-flink flink-streaming stream-processing flink-sql
1个回答
0
投票

理想情况下,你可以提供辅助信息(数据库表)作为额外的输入给Flink,然后简单地使用连接。只有当信息可以被Flink连接器获取时,这才是可行的。这样做的好处是,如果你做得正确,即使表的更新也会适当地反映在输出中。你也不需要关心结果的大小,因为这将由Flink自动处理。

另外,你也可以使用 asyncIO特别是为了与外部系统互动而制作的。它的缺点是 asyncIO 是目前所有活动请求的所有结果都必须放入主内存中。但这对于10_000行来说应该是可行的,尤其是各个事件似乎很少发生。

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