繁体   English   中英

KStream leftJoin KStream with the same Key

[英]KStream leftJoin KStream with the same Key

我有问题 taht 我尝试 leftjoin 2 Streams。 mergedKey 有 100 多个具有相同键的列表,而 DataStream 只有 1 个具有与 mergeKey 相同的键的列表。 我想在来自mergedKey 的endStream Value 与DataStream 合并。

      //get DataStream 
        final KStream<String, GenericRecord> DataStream = builder.stream("Datastreams");
        // Transform merged to Equals Keys to DataStream.Iot
        final KStream<String, GenericRecord> mergedKey = mergedFoIObs
                .map((key, value) -> KeyValue.pair(value.get("Datastream").toString(), value)); 
        // Join the DataStream with MergedStream


        final KStream<String, String> mergedFoIObsData = mergedKey.leftJoin(
                DataStream,
            (value, data) -> {
                try {
                    if(data != null{
                        value.put("Datastream", data.toString());
                        JSONObject jo = (JSONObject) new JSONParser().parse(value.toString());
                        return jo.toJSONString();}
                      return null



                } catch (ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return null;

            }, JoinWindows.of(10000));

但我的问题是,在 Endstream 中,我只得到 1 个具有正确值的列表,而其他列表的值为 null。

Taht 意味着数据在第一轮“回合”之后为空。

当我从 DataStream 转换到 KTable 时,我遇到了问题,我得到了正确的列表,但只有 37 个列表,所以 60 个丢失。

我希望你能帮助我。

对于 KStream-KStream 加入,取决于记录的时间戳是否加入。 查看此博客文章了解更多详细信息: https : //www.confluent.io/blog/crossing-streams-joins-apache-kafka/

对于 KStream-KTable 连接,这取决于何时将 KTable 记录加载到 KTable 中——Kafka Streams 尝试根据时间戳同步加载,但这是一种尽力而为的方法。 因此,可能会先处理一些 KStream 记录,而 KTable 仍然是空的。 只有在KTable记录被处理后(即KTable更新并包含该记录),连续的KStream记录才会成功加入。

请注意,下一个 Kafka 版本 2.1 将改进这种时间戳同步并提供更强的保证,用户甚至可以配置保证的严格程度。

“此外,对于不满足连接谓词的此 KStream 的每个输入记录,将使用另一个流的空值调用提供的 ValueJoiner。”

所以当数据(右值)为空时你不应该返回空值,你应该返回值(左值)。

leftJoin 上的 kafka 文档链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM