繁体   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