加入收藏 | 设为首页 | 会员中心 | 我要投稿 萍乡站长网 (https://www.0799zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Apache Flink 漫谈系列 - State

发布时间:2018-10-18 07:16:21 所属栏目:教程 来源:孙金城
导读:副标题#e# 【51CTO技术沙龙】10月27日,让我们共同探索AI场景化应用实现之道 实际问题 在流计算场景中,数据会源源不断的流入Apache Flink系统,每条数据进入Apache Flink系统都会触发计算。如果我们想进行一个Count聚合计算,那么每次触发计算是将历史上所

key-group的数量在job启动前必须是确定的且运行中不能改变。由于key-group是state分配的原子单位,而每个operator并行实例至少包含一个key-group,因此operator的最大并行度不能超过设定的key-group的个数,那么在Apache Flink的内部实现上key-group的数量就是最大并行度的值。

GroupRange.of(0, maxParallelism)如何决定key属于哪个Key-Group

确定好GroupRange之后,如何决定每个Key属于哪个Key-Group呢?我们采取的是取mod的方式,在KeyGroupRangeAssignment中的assignToKeyGroup方法会将key划分到指定的key-group中,如下:

  1. public static int assignToKeyGroup(Object key, int maxParallelism) { 
  2.       return computeKeyGroupForKeyHash(key.hashCode(), maxParallelism); 
  3.  
  4. public static int computeKeyGroupForKeyHash(int keyHash, int maxParallelism) { 
  5.       return HashPartitioner.INSTANCE.partition(keyHash, maxParallelism); 
  6.  
  7. @Override 
  8. public int partition(T key, int numPartitions) { 
  9.       return MathUtils.murmurHash(Objects.hashCode(key)) % numPartitions; 

(编辑:萍乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读