资源

【1】flink官方下载:http://flink.apache.org/downloads.html#apache-flink-1140
【2】Flink从入门到真香(16、Flink内置的一些Process Function):https://blog.51cto.com/mapengfei/2554673

自定义分区

  1. import org.apache.flink.api.common.functions.Partitioner;
  2. import org.apache.flink.api.java.tuple.Tuple2;
  3. import org.apache.flink.streaming.api.datastream.DataStream;
  4. import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
  5. import java.util.Arrays;
  6. public class PartitionerTest {
  7. public static void main(String[] args) throws Exception {
  8. StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
  9. DataStream dataStream = env.fromCollection(Arrays.asList(
  10. new Tuple2<String, Long>("1", 1L),
  11. new Tuple2<String, Long>("2", 2L),
  12. new Tuple2<String, Long>("3", 3L),
  13. new Tuple2<String, Long>("4", 4L)
  14. ));
  15. DataStream partitionData = dataStream.partitionCustom(new MyPartitioner(), 1);
  16. // 分区数和并行度有关,并行度要大于等于当前数据可以分区的个数
  17. partitionData.print().setParallelism(2);
  18. env.execute("PartitionerTest");
  19. }
  20. }
  21. class MyPartitioner implements Partitioner<Long> {
  22. @Override
  23. public int partition(Long s, int i) {
  24. System.out.println("s = " + s + "i = " + i);
  25. if(s % 2 == 0) {
  26. return 0;
  27. } else {
  28. return 1;
  29. }
  30. }
  31. }
  32. ====> 输出
  33. s = 1i = 2
  34. s = 2i = 2
  35. s = 3i = 2
  36. s = 4i = 2
  37. 1> (2,2)
  38. 2> (1,1)
  39. 1> (4,4)
  40. 2> (3,3)