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,你广播它,这样保证所有的元素都去到所有的下游任务。
我在 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,你广播它,这样保证所有的元素都去到所有的下游任务。