我在Flink中有这个Java代码:
ngModelChange
问题是窗口应该能够以parallelism = 2进行处理,因为有两个不同的数据组,带有键" odd"和"甚至"在Tuple3中的第二个String中。所有东西都以并行性6运行,但不是以并行性= 1运行的窗口,我只需要它因为我的要求而具有并行性= 2。
代码中使用的函数如下:
env.setParallelism(6);
//Read from Kafka topic with 12 partitions
DataStream<String> line = env.addSource(myConsumer);
//Filter half of the records
DataStream<Tuple2<String, Integer>> line_Num_Odd = line_Num.filter(new FilterOdd());
DataStream<Tuple3<String, String, Integer>> line_Num_Odd_2 = line_Num_Odd.map(new OddAdder());
//Filter the other half
DataStream<Tuple2<String, Integer>> line_Num_Even = line_Num.filter(new FilterEven());
DataStream<Tuple3<String, String, Integer>> line_Num_Even_2 = line_Num_Even.map(new EvenAdder());
//Join all the data again
DataStream<Tuple3<String, String, Integer>> line_Num_U = line_Num_Odd_2.union(line_Num_Even_2);
//Window
DataStream<Tuple3<String, String, Integer>> windowedLine_Num_U_K = line_Num_U
.keyBy(1)
.window(TumblingProcessingTimeWindows.of(Time.seconds(10)))
.reduce(new Reducer());
感谢您的帮助!
解决方案:我已经改变了键的内容来自&#34; odd&#34;和&#34;甚至&#34;到&#34; odd0000&#34;和&#34; even1111&#34;它现在正常运作。
答案 0 :(得分:2)
通过散列分区将密钥分发给工作线程。这意味着键值被散列并且线程由模数#workers确定。使用两个密钥和两个线程很可能将两个密钥分配给同一个线程。
您可以尝试使用其哈希值分布在两个线程中的不同键值。