数据流流工作不会超过1名工作人员

时间:2017-09-08 12:20:54

标签: java google-cloud-dataflow apache-beam

使用2017-09-08_03_55_43-9675407418829265662的流式数据流作业(Apache Beam SDK for Java 2.1.0)即使有越来越多的pubsub队列(现在是100k未发送的消息),也不会扩展到1个工作者之外 - 你有什么想法吗?

目前正在使用autoscalingAlgorithm=THROUGHPUT_BASEDmaxNumWorkers=10

2 个答案:

答案 0 :(得分:1)

数据流工程师。我查看了后端的工作,我可以看到它没有扩展,因为CPU利用率很低,这意味着其他因素限制了管道的性能,例如外部限制。在这些情况下,升级很少有帮助。

我发现有些捆绑包需要几个小时来处理。我建议调查您的管道逻辑,看看是否还有其他可以优化的部分。

答案 1 :(得分:0)

这就是我最终的结果:

import org.apache.beam.sdk.transforms.*;
import org.apache.beam.sdk.values.KV;
import org.apache.beam.sdk.values.PCollection;

import java.util.concurrent.ThreadLocalRandom;


public class ReshuffleWithRandomKey<T>
        extends PTransform<PCollection<T>, PCollection<T>> {

    private final int size;

    public ReshuffleWithRandomKey(int size) {
        this.size = size;
    }

    @Override
    public PCollection<T> expand(PCollection<T> input) {
        return input
                .apply("Random key", ParDo.of(new AssignRandomKeyFn<T>(size)))
                .apply("Reshuffle", Reshuffle.<Integer, T>of())
                .apply("Values", Values.<T>create());
    }

    private static class AssignRandomKeyFn<T> extends DoFn<T, KV<Integer, T>> {

        private final int size;

        AssignRandomKeyFn(int size) {
            this.size = size;
        }

        @ProcessElement
        public void process(ProcessContext c) {
            c.output(KV.of(ThreadLocalRandom.current().nextInt(0, size), c.element()));
        }
    }
}

你怎么看@ raghu-angadi和@ scott-wegner?