我在Apache Flink中有两个来自Flink训练RidesAndFares练习的数据流
TaxiRide stream () rideId, taxiId, driverId, ...
TaxiFare stream () rideId, isStart, startTime, endTime, startLon, ...
我试着以的身份加入他们
rides
.join(fares)
.where(r => r.rideId)
.equalTo(f => f.rideId)
.window(TumblingEventTimeWindows.of(Time.milliseconds(2)))
.apply {(r, f) => (r,f)}
测试还可以,但在我找到的解决方案中加入了RichCoFlatMapFunction
,你能帮我理解吗:
- 这种方式之间的区别
- 哪种类型的窗口使用
RichCoFlatMapFunction
(翻滚、滑动、会话、间隔( .join
如何处理state(放一些东西(
本练习的参考解决方案是用RichCoFlatMapFunction
实现的,因为本练习的目的是展示如何使用一些较低级别的机制:即键控状态和连接流。
顺便说一下,通常在实现联接时;"手工";将使用CCD_ 5而不是CCD_。但在Flink教程中,我们介绍了这个特定的练习,我们还没有谈到流程函数和计时器。
没有一个内置的窗口类型被实现为RichCoFlatMapFunction
,但窗口连接有点相似,因为它们也使用了两个输入运算符。您在apply
方法中提供的ProcessJoinFunction
是一种具有两个输入流的RichFunction
,它可以以与任何其他RichFunction
相同的方式成为有状态的。