flink:自定义数据分区

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<String> mySource = environment.addSource(new MySourceFunction());
    SingleOutputStreamOperator<Tuple2<String, Integer>> mapStream = mySource.map(new MapFunction<String, Tuple2<String, Integer>>() {
        @Override
        public Tuple2<String, Integer> map(String value) throws Exception {
            return new Tuple2<>(value, new Random().nextInt(10));
        }
    });

    DataStream<Tuple2<String, Integer>> resultStream = mapStream.partitionCustom(new MyPartitioner(), 1);


    resultStream.print();

    environment.execute("my job");

}

public static class MyPartitioner implements Partitioner<Integer>{

    @Override
    public int partition(Integer key, int partitions) {
        return key % partitions;
    }
}



public static class MySourceFunction implements SourceFunction<String> {
    private boolean runningFlag = true;
    @Override
    public void run(SourceContext<String> ctx) throws Exception {
        while (runningFlag){
            ctx.collect("hi world");
            ctx.collect("hello world");
            Thread.sleep(30000);
        }
    }

    @Override
    public void cancel() {
        runningFlag = false;
    }
}

}

相关推荐
中科同志科技2 小时前
真空回流炉高温合金元器件焊接炉实操教程:从参数设定到良率提升
大数据·人工智能·机器人·业界资讯
a16252704632 小时前
环保与安全双重约束下全球煤炭供需收缩及其价格上行研究
大数据·人工智能
小码哥哥2 小时前
企业资料管理的「第三次浪潮」:当网盘遇上知识库,文件开始“会思考“
大数据·人工智能
科技在线2 小时前
《读懂中国孩子》蓝皮书观察篇在数博会发布 童书借阅集中于五大类,具体书目分散
大数据
晶捷软件2 小时前
离散型制造数字化转型:晶捷智能全栈方案打通从研发到交付全链路
大数据·人工智能·制造
阿童木写作3 小时前
自动智能抠图工具推荐:跨马翻译批量处理图片与视频字幕,跨境电商高效翻译
大数据·人工智能·python·音视频
shengchanxian13 小时前
2026年9月家电总装倍速链流水线定制工厂走访笔记:探厂看穿交付实力
大数据·笔记·家电总装倍速链流水线工厂
光锥智能3 小时前
当Agent开始“动手”,企业AI竞争已从模型跑到“体系”
大数据·人工智能
jkyy20143 小时前
从娱乐座舱到健康服务空间:重构智能出行的主动守护范式
大数据·人工智能·健康医疗
牛企老板俱乐部3 小时前
2026年9月喀什配近视眼镜专业设备与验光师资质是选店核心依据
大数据