我有一个用例,其中我收到有关某个主题的推文,而有关其他主题的用户详细信息。我需要从用户详细信息中找到用户名,并将其设置为tweets。 使用以下代码,我可以获得预期的结果。
KStream<String, Tweet> tweetStream = builder
.stream("tweet-topic",
Consumed.with(Serdes.String(),
serdeProvider.getTweetSerde()));
KTable<String, User> userTable = builder.table("user-topic",
Consumed.with(Serdes.String(),
serdeProvider.getUserSerde()));
KStream<String, Tweet> finalStream = tweetStream.leftJoin(userTable, (tweetDetail, userDetail) -> {
if (userDetail != null) {
return tweetDetail.setUserName(userDetail.getName());
}
return tweetDetail;
}, Joined.with(Serdes.String(), serdeProvider.getTweetSerde(),
serdeProvider.getUserSerde()));
但是,如果kTable主题中有1000条记录,要处理100万条记录,此逻辑将花费2小时以上的时间,而之前则需要2到3分钟。
以前,当用户详细信息位于本地哈希图中时,过去通常需要10分钟来处理所有数据。 还有其他方法可以避免LeftJoin或提高其性能吗?