
202
|
第
11
章
KStream<Integer, UserActivity> userActivityKStream =
viewsWithProfile.leftJoin(searches,
(userActivity, search) ->
userActivity.updateSearch(search.getSearchTerms()),
JoinWindows.of(1000), Serdes.Integer(),
new UserActivitySerde(), new SearchSerde());
➐
➊
首先为点击事件和搜索事件创建流对象。
➋
为用户信息定义一个
KTable
。
KTable
是本地缓存,可以通过变更流来对其进行更新。
➌
将点击事件流与信息表连接起来,将用户信息填充到点击事件里。在一个流和表的连接
操作里,每个事件都会收到来自信息表缓存副本里的信息。这是一个左连接操作,所以
如果有的点击事件没有匹配的用户信息,这些事件仍然会被保留下来。
➍
这是连接方法,它接受两个参数,一个来自事件流,一个来自表记录,并返回一个值。
如果是在数据库里,必须知道如何将两个值合并成一个结果。这里创建了一个
activity
对象,它包含了用户的详细信息和用户浏览过的页面。
接下来要将点击信息和用户的搜索事件连接起来。这也是一个左连接操作,不过现在连
接的是两个流,而不是流和表。
这是连接方法,这里只是简单地将搜索关键词添加到匹配的页面视图。
这是最有意思的部分,流和流之间的连接是基于相同的时间窗口。如果只是把每个用户 ...