簡體   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