Java KStream join立即启动join函数,如何在窗口结束时延迟它?
正如综合文章中所解释的。外部KStream KStream Join在元素到达时立即发出元素,甚至在等待它在另一个K流中的匹配之前。这样做的缺点是,它会将未加入的事件与每个加入的事件一起复制 您能否建议任何替代方法来实现事件的连接,而不重复(如外部连接)或丢失(如内部连接)Java KStream join立即启动join函数,如何在窗口结束时延迟它?,java,join,spark-streaming,apache-kafka-streams,Java,Join,Spark Streaming,Apache Kafka Streams,正如综合文章中所解释的。外部KStream KStream Join在元素到达时立即发出元素,甚至在等待它在另一个K流中的匹配之前。这样做的缺点是,它会将未加入的事件与每个加入的事件一起复制 您能否建议任何替代方法来实现事件的连接,而不重复(如外部连接)或丢失(如内部连接) 根据相同的单击查看事件示例: KStream joinedeventstream= 单击事件流。外部连接(查看事件流, (clickEvent,viewEvent)->processJoin(clickEvent,view
根据相同的单击查看事件示例:
KStream joinedeventstream=
单击事件流。外部连接(查看事件流,
(clickEvent,viewEvent)->processJoin(clickEvent,viewEvent),/*如果找到匹配项,则快速激发*/
/*否则2秒后开火*/
JoinWindows.of(Duration.ofSeconds(2L)),streamjoind.with(Serdes.String(),jsonSerde,jsonSerde)
);
预期结果解释如下:
- 点击事件在查看加入的事件(a,a)后1秒到达
- 点击事件在查看后11秒到达-每个点击事件都有不同的事件。每次到达后2秒(窗口大小)后。(B,空)(空,B)
- 点击连接事件(C,C)后1秒,视图事件到达
- 有一个查看事件,但没有点击-到达2秒后未加入事件(D,null)
- 有一个点击事件,但没有视图-到达2秒后未加入事件(null,E)
KStream<String, JsonNode> joinedEventsStream =
clickEventsStream.outerJoin(viewEventsStream,
(clickEvent, viewEvent) -> processJoin(clickEvent, viewEvent),/* Fire quickly if match found,*/
/* else fire after 2 seconds */
JoinWindows.of(Duration.ofSeconds(2L)), StreamJoined.with(Serdes.String(), jsonSerde, jsonSerde)
);