当前位置: 首页 > 知识库问答 >
问题:

Flink 1.14中的全局排序,带有表和数据流API

江佐
2023-03-14

我一直在关注Flink 1.14中针对有界数据的不同全局数据排序选项。我发现Stackoverflow和其他网站上关于这个的很多问题都是好几年前的问题了,关于不推荐使用的API或者没有完全回答这个问题。由于Flink正在快速发展,我想问一下最新稳定的Flink (1.14)中的可用选项。

以下是我如何理解当前的情况(这可能是错误的)。我的问题也附上。Flink 有两个 API —— DataStreamTable , 它们可以在批处理执行模式下运行。数据集 API 已弃用。

批量执行

>

  • 表 API:它具有按顺序排序运算符。我用它来对有界数据进行排序。但它的并行度似乎不能超过1。我尝试使用 table.exec.resource.default-parallelism 属性,这增加了像 groupby 这样的运算符的并行度。但它并没有增加Orderby的并行性。问题 - 如果我想在批处理模式下对有界数据执行全局排序,orderby 的并行度是否限制为 1?那么 flink 如何处理大数据呢?它是否溢出到磁盘?

    数据流API-我没有找到任何显式API来进行排序。我能想到的唯一方法是首先按范围进行分区,然后使用自定义reduce函数对每个分区进行局部排序。reduce函数将输出已排序的分区。但为了得到全局排序的结果,我们必须再次将结果传递到并行度为1的运算符中。这再次带来了上述数据大小问题。

    流式执行

    >

  • 表API:如果使用流模式,order by运算符需要时间作为属性。我无法使用它对有界数据进行排序。

    DataStream API:选项与批处理执行模式下的DataStream API相同。

    总的来说,我无法在Flink中找到一个真正并行的有界数据集排序实现。我以上的发现正确吗?

  • 共有1个答案

    邬楚青
    2023-03-14

    考虑到Flink的组织方式,对于批处理,我认为最好的方法是对数据的分区进行排序,然后合并这些排序的分区。最后一步不能并行完成。我不知道表/SQLAPI是否会自动执行类似的操作,但我怀疑在快速查看源代码后可能会。

    你可以在flink用户邮件列表(https://flink . Apache . org/community . html # how-to-subscribe-to-a-mail-list)上询问这个问题。

    有关SQL规划器如何执行批处理工作负载以及如何调优它们的更多信息,我推荐https://flink . Apache . org/2021/10/26/sort-shuffle-part 1 . html。

     类似资料:
    • 我有一个primefaces的惰性数据表,如下所示: 这是我的实体类: 正如你已经可以看到我的每一个'收据'对象在datable有一个关系(ManyToOne)到一个'用户'对象(类)。在我的数据中,当我添加: 它可以显示收据所属的用户名。这也适用于 字段在第2列。我的问题是,当我试图排序/过滤第一和第二列在我懒惰的数据,我得到以下错误,因为关系: 由于exception说我需要在查询中包含use

    • 分页 使用 limit 和 offset 来控制分页数据: limit 指定该请求返回的结果个数 offset 偏移量,指定该请求返回的结果的起始位置 默认 limit 为 20, offset 为 0,我们也可以手动指定 limit 和 offset 来控制。例如,每页展示 100 条数据,需要获取第五页的数据,将 limit 设置为 100、offset 设置为 400 即可。limit 最大

    • {% tabs first=”SDK 1.1.0 及以上版本”, second=”SDK 1.1.0 以下版本” %} {% content “first” %} SDK 1.1.0 及以上版本 分页 使用 limit 和 offset 来控制分页数据: limit 指定该请求返回的结果个数 offset 偏移量,指定该请求返回的结果的起始位置 默认 limit 为 20, offset 为 0,

    • 问题内容: 我正在尝试对从JSON源填充的数据表进行排序。我的代码如下: HTML: JS: 小提琴:http : //jsfiddle.net/7czsM/1/ 如您所见,我试图将click函数添加到表标题中,以调用对数据进行排序的函数,但是它不起作用。 我已经在这里看到了这种方法的示例,该示例可以起作用:http : //jsfiddle.net/vojtajina/js64b/14/,但是当

    • 本文向大家介绍SVM和全部数据有关还是和局部数据有关?相关面试题,主要包含被问及SVM和全部数据有关还是和局部数据有关?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: SVM只和分类界限上的支持向量点有关,换而言之只和局部数据有关。

    • 我目前正在使用Flink 1.0编写一个聚合用例,作为该用例的一部分,我需要获得过去10分钟内登录的api数量。 这我可以很容易地使用keyBy("api"),然后应用10分钟的窗口和doe sum(count)操作。 但问题是我的数据可能会出现混乱,所以我需要一些方法来获取10分钟窗口内的api计数。。 例如:如果相同的api日志出现在两个不同的窗口中,我应该得到一个全局计数,即2,而不是两个单