Java 阿帕奇·弗林克浓缩

Java 阿帕奇·弗林克浓缩,java,apache-flink,flink-streaming,Java,Apache Flink,Flink Streaming,我有这样一个事件来源 class Event { String userName; String webPage; } 我需要用用户过去的网页访问来丰富我的事件流。(我有数据库中的信息,我可以将其用作Flink源) 类EventStats{ 字符串用户名; 地图网页计数器; } 我如何确保在开始处理事件流之前,我将为自己准备好浓缩数据? 我不想在我的流中进行DB调用。使用Flink tbh可能很难做到这一点。想到的第一个想法是在作业启动时进行db扫描并创建一个单独的流。该流可

我有这样一个事件来源

class Event {
    String userName;
    String webPage;
}
我需要用用户过去的网页访问来丰富我的事件流。(我有数据库中的信息,我可以将其用作Flink源)

类EventStats{
字符串用户名;
地图网页计数器;
}
我如何确保在开始处理事件流之前,我将为自己准备好浓缩数据?

我不想在我的流中进行DB调用。

使用Flink tbh可能很难做到这一点。想到的第一个想法是在作业启动时进行db扫描并创建一个单独的流。该流可用于初始化,您可以简单地将其与实际的
EventStats
流合并,但由于 因此,基本上有两种解决方案可以使用

第一个非常简单,因此如果您手动执行连接,您可以保留
Event
流中没有匹配
EventStats
的元素。如果您收到
EventStats
,您只需检查是否有任何
事件
匹配可以发出。如果元素不匹配,您可能还应该有一个逻辑,在一段时间后将其从状态中移除

另一个解决方案有点棘手,但也更优雅。因此,基本上您可以实现实现
InputSelectable
的自定义操作符,它首先尝试使用
EventStats
中的所有内容,然后才开始读取
事件流的元素。有一些警告,你可以参考更多信息。另外,请注意,
InputSelectable
是在Flink 1.9中引入的

class EventStats {
    String userName;
    Map<String,Integer> webPageCounters; 
}