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

处理结果:

相关推荐
ganshenml2 小时前
【GIT】Git 本地无法识别远程分支的原因与解决方法 not a valid ref
大数据·git·elasticsearch
火山引擎开发者社区3 小时前
DeepSeek-V3.2正式登陆火山方舟
大数据·人工智能
jqpwxt3 小时前
启点创新山水景区智慧旅游SAAS平台,智慧景区售检票系统,景区门票管理系统
大数据·旅游
陀螺财经4 小时前
加密热潮“席卷”美国军界
大数据·人工智能·区块链
打码人的日常分享5 小时前
智慧城市一网统管建设方案,新型城市整体建设方案(PPT)
大数据·运维·服务器·人工智能·信息可视化·智慧城市
Sui_Network5 小时前
21shares 在纳斯达克推出 2 倍 SUI 杠杆 ETF(TXXS)
大数据·人工智能·游戏·金融·区块链
龙亘川5 小时前
开箱即用的智慧城市一网统管 AI 平台——功能模块详解(3)
大数据·人工智能·智慧城市·智慧城市一网统管 ai 平台
dragonzoebai6 小时前
ol加载互联网瓦片大于18级时空白
大数据
AI营销快线6 小时前
AI营销下半场:B2B选型指南
大数据·人工智能
一只专注api接口开发的技术猿7 小时前
构建电商数据中台:基于淘宝 API 关键词搜索接口的设计与实现
大数据·开发语言·数据库