flink 读 kafka 数据源后,算子并行度不一致,导致不能输出?

问答 张浩 ⋅ 于 2021-09-15 14:34:59 ⋅ 最后回复由 张浩 2021-09-16 12:37:16 ⋅ 2506 阅读

本测试仅有kafkasource->map->print,三种算子。
1.将source/map/print的并行度均设为2,即kafkasource(2)->map(2)->print(2)。由于并行度一致,flink会将以上3个subtask合并为一个subtask放在slot里,共有2个subtask。
图1.1为并行度一致时代码输出结果
file
图1.2 为并行度一致时webui执行情况
file

2.改变source/map/print三种算子的并行度,如kafkasource(2)->map(2)->print(1),之后flink会将以上kafkasource和map合并为一个subtask,最终有3个subtask。
图1.1为并行度不一致时代码输出结果
file
图1.2 为并行度一致时webui执行情况
file
通过测试,在读取kafka数据源后,并行度一致的情况下,是有结果输出的。但是在并行度不一致的情况,没有结果输出。task的状态都是running,背压也ok。所以,造成这种问题的原因是什么呢?

点赞
成为第一个点赞的人吧 :bowtie:
回复数量: 7
  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2021-09-15 14:50:02

    比如你一共有2个槽,然后你关闭了槽共享,或者你给你的operator起了新的组名,不然不会没有输出结果的。

  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2021-09-15 14:51:39

    file
    你里面是怎么配置env的

  • 张浩
    2021-09-15 14:56:40

    @青牛

    file
    我没有设置槽共享,也没有设置组名,都是默认配置

  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2021-09-15 14:59:08

    @张浩

            Configuration conf = new Configuration();
            conf.setString("taskmanager.numberOfTaskSlots", "8");
            StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(conf);

    槽设置大点

  • 张浩
    2021-09-15 15:12:31

    @青牛

    file

    file
    把槽加大后,Available Task Slots 变成6个,因为我最大并行度为2,这是可以理解的。但是任务还是卡在并行度不一致的地方。

  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2021-09-15 16:39:03

    打断电看看PrintSinkFunction有没有数据进来

  • 张浩
    2021-09-16 12:37:16

    @青牛 问题已解决,原因是flink版本问题,我从1.9.3升级到了1.11.2就可以了。真是没想到会是这样

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter