Flink广播功能使用单并行

Flink broadcast function uses single parallelism

我在 Flink 中有一个广播功能,它接受两个运动流,一个用于元素 A,一个用于广播元素 B。我注意到即使我已经设置了环境并行度,所有元素 A 都会进入一个任务槽到 4.

这里是主要的流程函数:

env.setParallelism(4);

BroadcastStream<ElementBroadcast> elementBroadcastStream =
    env.addSource(elementBroadcastSource)
        .uid("element-broadcast")
        .name("broadcast")
        .setParallelism(4)
        .returns(ElementB.class)
        .broadcast(Descriptors.ELEMENT_B_DESCRIPTORS);

DataStream<ElementA> elementAStream =
    elementASourceStream
        .connect(elementBroadcastStream)
        .process(injector.getInstance(
            ElementAElementBProcessFunction.class))
        .uid("");

奇怪的是,当我检查 Flink 作业或读取我在 ElementAElementBProcessFunction 中添加的指标时,只有 processBroadcastElement() 中的指标确认所有 4 个任务槽都可以接收元素 B,processElement() 就像单线程函数,您还可以从随附的屏幕截图中看到,所有记录(元素 A)都在插槽 3 上接收。其他三个插槽从我的应用程序接收 2 个广播元素(元素 B),但根本没有元素 A。

有谁知道为什么多槽并行只出现在 processBroadcastElement() 而不是 processElement()?

谢谢!

这可能是因为soucre A的分区是1,您可以在AWS管理控制台上查看或者使用rebalance或rescale before process。至于元素B,你广播它,这样保证所有的元素都去到所有的下游任务。