我有一个事件的源头看起来像这样
class Event {
String userName;
String webPage;
}我需要丰富我的事件流与过去的网页访问用户。(我有数据库中的信息,我可以使用它作为Flink源)
class EventStats {
String userName;
Map<String,Integer> webPageCounters;
}如何确保在开始处理事件流之前,我将为我准备好丰富的数据?
我不想在流中执行DB调用。
发布于 2021-05-11 17:29:49
用Flink tbh来做这件事可能是一场斗争。想到的第一个想法是在作业启动时执行db扫描并创建单独的流。该流可以用于初始化,您可以简单地将其与实际的EventStats流结合起来,但由于这个问题。,这是目前不可能的,因此,基本上有两种解决方案可以使用。
第一种方法非常简单,因此如果您手动执行连接,则可以保留Event流中的元素,这些元素没有匹配的EventStats。如果接收到EventStats,只需检查是否有任何Event匹配可以发出。您可能还应该有一个逻辑,如果这些元素不匹配,则在一段时间后从状态中移除元素。
另一个解决方案是有点棘手,但也更优雅。因此,基本上您可以实现实现InputSelectable的自定义操作符,其方式是首先尝试使用EventStats中的所有内容,然后才开始读取Event流的元素。有一些警告,您可以参考文档获得更多信息。另外,请注意,InputSelectable是在Flink 1.9中引入的。
https://stackoverflow.com/questions/67484778
复制相似问题