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;
}