Flink keyBy算子的分区规则

demo代码

复制代码
String worlds = "flink,spark,hadoop,zk,kafka";

streamSource.flatMap(new RichFlatMapFunction<String, String>() {
            @Override
            public void flatMap(String value, Collector<String> collector) throws Exception {
                String[] worlds = value.split(",");
                for (String world : worlds) {
                    collector.collect(world);
                }
            }
        }).keyBy(new KeySelector<String, String>() {
            @Override
            public String getKey(String key) throws Exception {
                return key;
            }
        }).process(new KeyedProcessFunction<String, String, String>() {
            @Override
            public void processElement(String key,KeyedProcessFunction<String, String, String>.Context ctx,Collector<String> out) throws Exception {
                out.collect(key);
            }
        }).print("->");

        env.execute();

运行结果:

源码查看

我们进去keyBy算子,看看计算逻辑是怎样的:


根据调用逻辑,我们抽象出分区数据的计算逻辑:

复制代码
(MathUtils.murmurHash(key.hashCode()) % maxParallelism) * parallelism / maxParallelism ;

其中:

  • maxParallelism:默认128
  • parallelism:并行度数
  • key:分区键

验证

我们把抽出来的逻辑加到计算结果中查看

复制代码
process(new KeyedProcessFunction<String, String, String>() {
            @Override
            public void processElement(String key,
                                       KeyedProcessFunction<String, String, String>.Context ctx,
                                       Collector<String> out) throws Exception {
                String currentKey = ctx.getCurrentKey();
                int i = (MathUtils.murmurHash(key.hashCode()) % 128) * parallelism / 128 ;
                out.collect(key + "_" +i);
                out.collect(key);
            }

处理结果:

相关推荐
大大大大晴天1 天前
深入解析 Flink Kafka Connector:原理、配置与最佳实践
flink
大大大大晴天2 天前
Hudi技术内幕:RecordPayload到RecordMerger
大数据
SelectDB3 天前
秒级弹性、最高降本 70%:SelectDB Serverless 如何重塑云数仓资源效率
大数据·后端·云原生
WhoAmI3 天前
MapReduce框架原理解析一:InputFormat
大数据·hadoop
WhoAmI3 天前
MapReduce框架原理解析三:OutputFormat
大数据·hadoop
WhoAmI3 天前
MapReduce框架原理解析二:Shuffle
大数据·hadoop
大大大大晴天4 天前
Hudi技术内幕:Key Generation原理与实践
大数据
得物技术7 天前
从埋点需求到规则资产:Hermes Agent 重构得物数仓工作流
大数据·llm·ai编程
久美子7 天前
AI驱动数仓建设的Harness工程实践——本体建模、知识分层与上下文工程
大数据
大树888 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai