簡體   English   中英

如何進行 Kafka Streams Left Join,在固定時間段后返回沒有相應 RHS 的 LHS 消息?

[英]How to do a Kafka Streams Left Join that returns LHS messages that have no corresponding RHS after a fixed period?

我是 Kafka Streams 的新手。 我剛剛在流 A 和流 B 之間建立了一個左連接。在我的設置中,每個 A 都有一個 B,它在 A 之后幾毫秒到達,但在現實生活中可能缺少 B,或者 B遲到(說 250 毫秒后)。 我希望能夠找到這些(丟失的和遲到的 B)。 我認為這很容易 - 只需在 A 和 B 之間進行左連接,指定窗口,然后完成工作。 但令我驚訝的是,我在左連接流輸出中得到了 2 行。 想想看,這是有道理的 - 當 A 到達時,沒有 B 並且生成了一個看起來像A-[null]的連接行。 幾毫秒后,B 到達,然后生成AB

我想要的是讓那些 A 消息在說 100 毫秒后沒有相應的 B - B 可能會遲到; 可能永遠不會到達; 但它沒有在 A 的 100 毫秒內到達。是否有標准模式/慣用方式來做到這一點? 我現在在想,也許我必須讓消費者接收 A,然后在設定的時間后觸發一條消息(盡管我不確定如果沒有一些笨重的同步代碼會如何完成),然后我必須在那個(稱之為 Ax)和 B 之間加入。

這可能是一個很常見的要求,但它似乎並不像我最初想象的那么容易......任何想法/指針/提示將不勝感激。 謝謝。

好的,我有一些似乎有效的東西。 我需要做的就是,在左連接(當然有一個窗口)之后,做一個.groupByKey().count()然后我可以發送東西(我認為使用filter()branch() ,雖然我還沒有這樣做)計數 < 2 到一個流(“缺失”),而其他的到另一個“好”流,例如用於分析/計算指標等。

我嘗試使用.windowedBy(TimeWindows.of(ofMillis(250)).grace(ofMillis(10))).suppress(Suppressed.untilWindowCloses(unbounded())); 但它無處可去,所以同樣好,一個帶有計數的 groupBy 是事物外觀所需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM