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

处理结果:

相关推荐
武子康19 分钟前
大数据-274 Spark MLib - 基础介绍 机器学习算法 剪枝 后剪枝 ID3 C4.5 CART
大数据·人工智能·算法·机器学习·语言模型·spark-ml·剪枝
加百力3 小时前
戴尔AI服务器订单激增至121亿美元,但传统业务承压
大数据·服务器·人工智能
TGITCIC6 小时前
数据基座觉醒!大数据+AI如何重构企业智能决策金字塔(下)
大数据·大数据ai·大模型落地·大模型大数据·ai与大数据结合·大数据集成ai·企业ai
王禄DUT8 小时前
防疫大数据 第27次CCF-CSP计算机软件能力认证
大数据·c++·算法
北漂老男孩9 小时前
Flink SQL 编程详解:从入门到实战难题与解决方案
大数据·sql·flink
梅一一10 小时前
5款AI对决:Gemini学术封神,但日常办公我选它
大数据·人工智能·数据可视化
telllong10 小时前
几种常用的Agent的Prompt格式
大数据·数据库·prompt
jiedaodezhuti10 小时前
elasticsearch低频字段优化
大数据·elasticsearch·搜索引擎
Smile丶凉轩12 小时前
技术栈ES的介绍和使用
大数据·c++·elasticsearch·搜索引擎
tongjiwenzhang12 小时前
AppTrace 视角下 App 一键拉起:提升应用转化率的高效方案
大数据