小工具知识网

当前位置: 首页 > 行业知识 > flink:自定义数据分区

行业知识

flink:自定义数据分区

2026-11-13 05:47:43 来源:互联网转载

shuffle随���地将数据分配到下游的子任务。

()

rebalance用round robbin模式将数据分配到下游的子任务。

global把所有的数据都分配到一个分区。

()

partitionCustom: 自定义数据分区。

package cn.edu.tju.demo;

import org.apache.flink.api.common.functions.;

import org.apache.flink.api.common.serialization.SimpleStringSchema;

import org.apache.flink.api.java.tuple.Tuple2;

import org.apache.flink.configuration.Configuration;

import org.apache.flink.streaming.api.collector.selector.OutputSelector;

import org.apache.flink.streaming.api.datastream.;

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

import org.apache.flink.streaming.api.functions.co.CoMapFunction;

import org.apache.flink.streaming.api.functions.source.SourceFunction;

import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer;

import org.apache.flink.util.Collector;

import org.apache.kafka.clients.consumer.ConsumerConfig;

import org.apache.kafka.clients.producer.ProducerConfig;

import org.apache.kafka.common.serialization.StringDeserializer;

import org.apache.kafka.common.serialization.StringSerializer;

import java.util.*;

public class Test12 {

public static void main(String[] args) throws Exception {

StreamExecutionEnvironment environment = StreamExecutionEnvironment

.getExecutionEnvironment();

    DataStreamSource mySource = environment.addSource(new MySourceFunction());    SingleOutputStreamOperator mapStream = mySource.map(new MapFunction() {        @Override        public Tuple2 map(String value) throws Exception {            return new Tuple2(value, new Random().nextInt(10));        }    });    DataStream resultStream = mapStream.partitionCustom(new MyPartitioner(), 1);    resultStream.print();    environment.execute("my job");}public static class MyPartitioner implements Partitioner{    @Override    public int partition(Integer key, int partitions) {        return key % partitions;    }}public static class MySourceFunction implements SourceFunction {    private boolean runningFlag = true;    @Override    public void run(SourceContext ctx) throws Exception {        while (runningFlag){            ctx.collect("hi world");            ctx.collect("hello world");            Thread.sleep(30000);        }    }    @Override    public void cancel() {        runningFlag = false;    }}

}

上一篇:揭秘整数集,全面解析,内容详尽!

下一篇:HTUCTF 部分Crypto web reverse pwn题解