程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了比较 Flink Table API 加入 table 和 DataStream.join()大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决比较 Flink Table API 加入 table 和 DataStream.join()?

开发过程中遇到比较 Flink Table API 加入 table 和 DataStream.join()的问题如何解决?下面主要结合日常开发的经验,给出你关于比较 Flink Table API 加入 table 和 DataStream.join()的解决方法建议,希望对你解决比较 Flink Table API 加入 table 和 DataStream.join()有所启发或帮助;

我尝试通过 ID 连接两个 DataStream,发现有两个 API 集可以这样做,

  1. https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/stream/operators/joining.html
  2. https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/table/sql/queries.html#joins

看来他们俩都能完成工作。

所以我的问题是:

  1. 主要区别是什么?如何选择?
  2. 如果我加入流 A 和 B,并且两者都有很多记录(例如 A:10000, B:20000),是不同流中的所有记录相互比较 逐个?比较的总数是 10000x20000
  3. 此外,是否有任何情况(可能是网络问题),流 B 是 延迟,则流 B 中的某些记录不会与流进行比较 一个?

谢谢。

解决方法

主要区别是什么?如何选择?

有几种不同的 API 可用于实现与 Flink 的连接。您可以在 Ververica 共享的 Apache Flink 开发人员培训材料中找到有关不同方法的调查,位于 https://Training.ververica.com/decks/joins/?mode=presenter(注册表后面)。免责声明:我编写了这些培训材料。

总结:

用于实现流式连接的低级构建块是 KeyedCoProcessFunction。在拥有完全控制权很有价值的特殊情况下,直接使用它是有意义的,但在大多数情况下,您最好使用更高级别的 API。

DataSet API 提供以散列连接、排序合并连接和广播连接实现的批量连接。此 API 已被软弃用,最终将被有界流和 Flink 的关系 API (SQL/TablE) 的组合所取代。

DataStream API 仅提供一些时间窗口和间隔连接。它不支持任何可能需要无限状态保留的连接。

SQL/Table API 支持广泛的批处理和流连接:

流媒体和批处理

  • 时间窗口和间隔 INNER + OUTER JOIN
  • 非窗口 INNER + OUTER JOIN

仅限流媒体

  • 时间版本的 INNER JOIN
  • 外部查找 INNER JOIN

SQL 优化器能够推断出由于时间限制而不再需要的状态。但是一些流连接确实有可能需要无界状态才能产生完全正确的结果;可以实施状态保留策略以清除不太可能需要的陈旧条目。

请注意,Table API 与 DataStream API 完全可互操作。我会尽可能使用 SQL/Table 连接,因为它们实现起来要简单得多,而且经过了很好的优化。

如果我加入流A和B,并且两者都有很多记录(例如A:10000,B:20000),不同流中的所有记录是否一一比较?比较总数为 10000x20000

Flink 支持等键连接,对于某些特定的键,您希望连接来自流 A 和 B 的具有相同键值的记录。如果来自 A 的 10000 条记录和来自 B 的 20000 条记录都具有相同的键,那么是的,A 和 B 的无约束连接将产生 10000x20000 结果。

但我不相信这就是你的意思。 Flink 将在其托管状态下实现分布式哈希表,这些哈希表将在整个集群中(按键)进行分片。例如,当一条新记录从流 A 到达时,它将被散列到 A 的构建端散列表中,并且 B 的相应散列表将探查以找到匹配的记录——并且将发出所有合适的结果。>

请注意,这是并行完成的。但是来自 A 和 B 的特定键的所有事件都将由同一个实例处理。

另外,是否有任何情况(可能是网络问题),流 B 延迟,然后流 B 中的某些记录没有与流 A 进行比较?

如果您结合 SQL/Table API 提供的时间窗口或间隔连接进行事件时间处理,则不会虑延迟事件(由水印确定),结果将是不完整。使用 DataStream API 可以实现对延迟事件的特殊处理,例如将它们发送到侧输出,或者收回和更新结果。

对于没有时间限制的连接,延迟事件只要到达就会正常处理。结果(最终)是完整的。

大佬总结

以上是大佬教程为你收集整理的比较 Flink Table API 加入 table 和 DataStream.join()全部内容,希望文章能够帮你解决比较 Flink Table API 加入 table 和 DataStream.join()所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。