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 小时前
想提高查询性能,用GaussDB(DWS) in表达式还是or表达式?
大数据·数据库·sql
出发行进1 小时前
Hadoop其一,介绍本地模式,伪分布模式和全分布搭建
大数据·运维·hadoop·分布式
xyz20111 小时前
Hadoop中几种列式存储的区别和联系
大数据·hadoop·分布式
Rverdoser1 小时前
【Spark】Spark Join类型及Join实现方式
大数据·分布式·spark
Elastic 中国社区官方博客1 小时前
Elastic 8.17:Elasticsearch logsdb 索引模式、Elastic Rerank 等
大数据·数据库·人工智能·sql·elasticsearch·搜索引擎·全文检索
yunfei_run1 小时前
elasticsearch集群升级登录认证
java·大数据·后端·spring·elasticsearch
GIS甲鱼哥1 小时前
GeoWave实现简单的时空范围查询(HBase数据库)
java·大数据·数据库·hbase
努力的布布2 小时前
Elasticsearch:Mapping-映射
大数据·elasticsearch·搜索引擎
说私域2 小时前
AI 智能名片 S2B2C 商城小程序在社群团购运营中的作用与价值
大数据·人工智能·小程序