【问题标题】:joining DataStreams in Apache Flink在 Apache Flink 中加入 DataStreams
【发布时间】:2021-05-19 16:03:42
【问题描述】:

我在 Apache Flink 中有 2 个来自 Flink Training RidesAndFares exercise 的 DataStreams

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)}

测试还可以,但是在solution我发现加入RichCoFlatMapFunction,你能帮我理解一下吗:

  1. 这种方式的区别
  2. 哪种类型的窗口使用RichCoFlatMapFunction(翻滚、滑动、会话、间隔)
  3. .join 如何处理状态(放置一些东西)

【问题讨论】:

  • “与国家合作”是什么意思?跨连接保存信息?
  • 2.它适用于任何类型的窗户。连接不依赖于窗口。

标签: apache-flink flink-streaming


【解决方案1】:

本练习的参考解决方案是使用 RichCoFlatMapFunction 实现的,因为本练习的目的是展示如何使用一些较低级别的机制:即键控状态和连接流。

顺便说一句,通常当“手动”实现连接时,为了访问计时器和状态,人们将使用KeyedCoProcessFunction 而不是RichCoFlatMap。但是在我们介绍这个特定练习的 Flink 教程中,我们还没有讨论过进程函数和计时器。

没有一个内置的窗口类型被实现为RichCoFlatMapFunction,但是窗口连接有点相似,因为它们也使用双输入运算符。您在apply 方法中提供的ProcessJoinFunction 是一种具有两个输入流的RichFunction,它可以像任何其他RichFunction 一样成为有状态的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    相关资源
    最近更新 更多