【问题标题】:How to understand slot sharing and parallelism in Apache Flink如何理解 Apache Flink 中的插槽共享和并行性
【发布时间】:2020-05-18 07:00:42
【问题描述】:

我正在尝试通过示例 WordCount 找出 Flink 中的插槽共享和并行性。

说我需要用Flink做字数统计工作,数据源只有一个,sink只有一个。

在这种情况下,我可以像上图那样进行设计吗?我的意思是,我在Source + map() 上设置了两个子任务,在keyBy()/window()/apply() 上设置了两个子任务,也就是说,我有两行:A --- B --- SinkC --- D --- Sink,这样我可以得到更好的性能。

比如有一个数据流来了:aaabbbaaa。使用上面的设计,我可能会遇到这样的情况:aaabbb 进入A --- B,另一个aaa 进入C --- D。最后,我可以在Sink 获得结果aaa: 2, bbb: 1。我现在合适吗?

如果我是对的,我知道同一个任务的子任务不能共享一个槽,那么是不是意味着AC不能共享一个槽,BD可以'共享一个插槽?我对吗?如何分配插槽?我应该将A + B + Sink 放入一个插槽,将C + D 放入另一个插槽吗?

【问题讨论】:

    标签: parallel-processing architecture apache-flink flink-streaming


    【解决方案1】:

    默认情况下启用插槽共享。启用槽共享后,所需的槽数与具有最高并行度的任务的并行度相同(在本例中为两个)。

    在此示例中,调度程序会将A + B + Sink 放入一个槽中,并将C + D 放入另一个槽中。这不是您通常需要配置甚至考虑太多的东西,因为默认设置在大多数情况下都能正常工作。

    如果您要完全禁用插槽共享,则此作业将需要 5 个插槽,A、B、C、D 和接收器各一个。但是禁用插槽共享几乎从来都不是一个好主意。只需确保每个插槽都有足够的资源来同时运行所有子任务。

    【讨论】:

    • 那么如果我在这个例子中只设置了一个 slot,那么 Flink 会做什么呢?它会因为至少需要两个插槽而引发一些异常吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    相关资源
    最近更新 更多