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);
            }

处理结果:

相关推荐
Rubin智造社16 分钟前
# OpenClaude命令实战|核心控制三剑客/reasoning+/verbose+/status 实操指南
大数据·人工智能
华奥系科技1 小时前
智慧经济新格局:解码社区、园区与城市一体化建设逻辑
大数据·人工智能·科技·物联网·安全
TDengine (老段)2 小时前
TDengine IDMP 组态面板 —— 画布
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
张张123y3 小时前
AI Agent Memory:从理论到实战,掌握长短期记忆的核心技术【1】
大数据·人工智能·transformer
Web3VentureView4 小时前
倒计时 12 小时,SYNBO 主网即将上线!
大数据·人工智能·金融·web3·区块链
yhdata4 小时前
173.6亿元!2032年半导体材料回收市场规模锁定,资源再生产业迎来新增长极
大数据·人工智能
weixin_704266055 小时前
SpringMVC轻松处理JSON数据
大数据
金智维科技官方5 小时前
APA智能流程自动化是什么?
大数据·人工智能·ai·智能体·apa
夜郎king5 小时前
Java 实战:基于高德周边检索 API 获取耒阳童车产业园企业分布数据
大数据·gis检索·java地图实战