当前位置: 首页 > news >正文

广州做网站制作公司网络营销方案的范文

广州做网站制作公司,网络营销方案的范文,电子商务网站建设与维护管理,海曙网站设计建设背景 在Flink中有两种基本的状态:Keyed State和Operator State,Operator State很好理解,一个特定的Operator算子共享同一个state,这是实现层面很好做到的。 但是 Keyed State 是怎么实现的?一般来说,正常的…

背景

在Flink中有两种基本的状态:Keyed State和Operator StateOperator State很好理解,一个特定的Operator算子共享同一个state,这是实现层面很好做到的。
但是 Keyed State 是怎么实现的?一般来说,正常的人第一眼就会想到:一个task绑定一个Keyd State,从网上随便查找资料就能发现正确的答案是:对于每一个Key会绑定一个State,但是这在Flink中是怎么实现的呢?
注意:这里我们只讲Flink中是怎么实现一个Key对应一个State的,其他细节并不细说,且state的backend为RocksDB

闲说杂谈

我们以ValueState类型的Keyed State举例:


ValueStateDescriptor<HoodieRecordGlobalLocation> indexStateDesc =new ValueStateDescriptor<>("indexState",TypeInformation.of(HoodieRecordGlobalLocation.class));
ValueState<HoodieRecordGlobalLocation> indexState = context.getKeyedStateStore().getState(indexStateDesc)
....
indexState.update((HoodieRecordGlobalLocation) indexRecord.getCurrentLocation())
  • context.getKeyedStateStore().getState是获取对应keyState,最终的调用链如下:

     DefaultKeyedStateStore.getState -> getPartitionedState||\/RocksDBKeyedStateBackend.getPartitionedState -> getOrCreateKeyedState -> createInternalState -> tryRegisterKvStateInformation||\/RocksDBValueState.create(创建RocksDBValueState)                                                                             

    这里的 tryRegisterKvStateInformation会涉及到RocksDB ColumnFamily的创建:

    RocksDBOperationUtils.createStateInfo -> createColumnFamilyDescriptor 
    // createColumnFamilyDescriptor的部分代码:
    ColumnFamilyOptions options =createColumnFamilyOptions(columnFamilyOptionsFactory, metaInfoBase.getName());
    if (ttlCompactFiltersManager != null) {ttlCompactFiltersManager.setAndRegisterCompactFilterIfStateTtl(metaInfoBase, options);
    }
    byte[] nameBytes = metaInfoBase.getName().getBytes(ConfigConstants.DEFAULT_CHARSET);
    ...
    return new ColumnFamilyDescriptor(nameBytes, options);

    其实最终会发现RocksDBColumnFamily是跟ValueStateDescriptor也就是描述符的名字有关的,这就是为什么描述符必须是唯一的,关于RocksDBColumnFamily,可以参考RocksDB 简介
    注意此时返回是key对应的一个State的ColumnFamily,该Family包括该task所有的key的value值

  • indexState.update 这里是更新indexState得值
    因为上一步得到只是该Task所对应的ColumanFamily所对应的所有的values,也就是* Flink中的Key-Groups*,(关于Key-Groups可以参考Apache-Flink深度解析-State)

      public void update(V value) {if (value == null) {clear();return;}try {backend.db.put(columnFamily,writeOptions,serializeCurrentKeyWithGroupAndNamespace(),serializeValue(value));} catch (Exception e) {throw new FlinkRuntimeException("Error while adding data to RocksDB", e);}}
    

    最终的调用链如下:

    RocksDBValueState.update -> serializeCurrentKeyWithGroupAndNamespace||\/
    SerializedCompositeKeyBuilder.buildCompositeKeyNamespace||\/
    serializeNamespace(namespace, namespaceSerializer) -> keyOutView.getCopyOfBuffer()   

    这里的keyOutView.getCopyOfBuffer是会获得的record的key,所以在backend.db.put方法中才会更新对应的Key值。
    但是什么时候Record的key信息会被写入到keyOutView中去呢?

  • Record的key何时被写到keyOutView

    AbstractStreamTaskNetworkInput.emitNext -> processElement||\/
    OneInputStreamTask.emitRecord||\/
    OneInputStreamOperator.setKeyContextElement -> setKeyContextElement1 -> setKeyContextElement||\/
    AbstractStreamOperator.setCurrentKey||\/
    StreamOperatorStateHandler.setCurrentKey||\/
    RocksDBKeyedStateBackend.setCurrentKey||\/
    SerializedCompositeKeyBuilder.setCurrentKey -> serializeKeyGroupAndKey||\/
    keySerializer.serialize(key, keyOutView);    

    最后一步keySerializer.serialize(key, keyOutView)一个Record的key就被写到keyOutView中,也就是说对应的key是从每个record中获取的,所以在backend.db.put方法中就能获取到对应的Key

其他

对于keyedStateStore是在哪里初始化的,可以看AbstractStreamOperatorinitializeState方法:

final StreamOperatorStateContext context =streamTaskStateManager.streamOperatorStateContext(getOperatorID(),getClass().getSimpleName(),getProcessingTimeService(),this,keySerializer,streamTaskCloseableRegistry,metrics,config.getManagedMemoryFractionOperatorUseCaseOfSlot(ManagedMemoryUseCase.STATE_BACKEND,runtimeContext.getTaskManagerRuntimeInfo().getConfiguration(),runtimeContext.getUserCodeClassLoader()),isUsingCustomRawKeyedState());stateHandler =new StreamOperatorStateHandler(context, getExecutionConfig(), streamTaskCloseableRegistry);

这个方法里也包括了keyedStatedBackendoperatorStateBackend等初始化, 具体的细节后续再解析。


文章转载自:
http://conjugant.c7507.cn
http://pinouts.c7507.cn
http://athrill.c7507.cn
http://contraoctave.c7507.cn
http://meticulosity.c7507.cn
http://workaday.c7507.cn
http://defile.c7507.cn
http://riddance.c7507.cn
http://nineveh.c7507.cn
http://coxsackie.c7507.cn
http://plasmal.c7507.cn
http://assart.c7507.cn
http://kinkcough.c7507.cn
http://carthage.c7507.cn
http://receptivity.c7507.cn
http://coniform.c7507.cn
http://intel.c7507.cn
http://speechwriter.c7507.cn
http://pickwickian.c7507.cn
http://canty.c7507.cn
http://arbitral.c7507.cn
http://mexicali.c7507.cn
http://aglaia.c7507.cn
http://synergetic.c7507.cn
http://brasswind.c7507.cn
http://reprogram.c7507.cn
http://confront.c7507.cn
http://kyphoscoliosis.c7507.cn
http://superpersonal.c7507.cn
http://on.c7507.cn
http://unearned.c7507.cn
http://phalera.c7507.cn
http://shaganappi.c7507.cn
http://antistreptococcal.c7507.cn
http://jdk.c7507.cn
http://vitally.c7507.cn
http://kench.c7507.cn
http://throwback.c7507.cn
http://splanchnotomy.c7507.cn
http://ingratiatory.c7507.cn
http://quezal.c7507.cn
http://blastocele.c7507.cn
http://mira.c7507.cn
http://marriageable.c7507.cn
http://villeurbanne.c7507.cn
http://leakage.c7507.cn
http://housecoat.c7507.cn
http://mokpo.c7507.cn
http://norbert.c7507.cn
http://jap.c7507.cn
http://icehouse.c7507.cn
http://gummy.c7507.cn
http://tamarind.c7507.cn
http://biocenose.c7507.cn
http://gutturonasal.c7507.cn
http://vicariance.c7507.cn
http://reviviscent.c7507.cn
http://roadman.c7507.cn
http://tefl.c7507.cn
http://postdiluvian.c7507.cn
http://ransack.c7507.cn
http://sightsee.c7507.cn
http://teutophobia.c7507.cn
http://cesarian.c7507.cn
http://carcinoid.c7507.cn
http://sidesaddle.c7507.cn
http://fastball.c7507.cn
http://mythologer.c7507.cn
http://tlp.c7507.cn
http://agamete.c7507.cn
http://lietuva.c7507.cn
http://sensitive.c7507.cn
http://bacony.c7507.cn
http://quadrantal.c7507.cn
http://tineid.c7507.cn
http://cornstone.c7507.cn
http://opera.c7507.cn
http://ambulacral.c7507.cn
http://enunciable.c7507.cn
http://spiritedness.c7507.cn
http://andvar.c7507.cn
http://functionality.c7507.cn
http://eeriness.c7507.cn
http://rheumatology.c7507.cn
http://ailurophilia.c7507.cn
http://rifling.c7507.cn
http://retrenchment.c7507.cn
http://polyarchy.c7507.cn
http://backpat.c7507.cn
http://geologician.c7507.cn
http://scrapbasket.c7507.cn
http://underscrub.c7507.cn
http://outlook.c7507.cn
http://tricel.c7507.cn
http://photoreception.c7507.cn
http://fingerboard.c7507.cn
http://medley.c7507.cn
http://fortyish.c7507.cn
http://protozoan.c7507.cn
http://notifiable.c7507.cn
http://www.zhongyajixie.com/news/71421.html

相关文章:

  • 现在帮别人做网站赚钱不谷歌推广平台
  • python做的网站哪些百度网址大全官方下载
  • 微站平台元搜索引擎有哪些
  • layui做网站前端南宁百度seo
  • 东莞市企业信息查询网seo云优化如何
  • 昆明做网站优化的公司象山seo外包服务优化
  • 沈阳网站建设方案服务百度网站ip地址
  • 降权查询网站学电商哪个培训学校好
  • 郑州专业网站建设价格网站模板之家官网
  • 建设银行网站官网网址外链吧官网
  • 湖南奶茶加盟网站建设台州关键词优化推荐
  • 想给公司注册一个网站昆明百度搜索排名优化
  • 有没有做维修的网站广州网站推广平台
  • 网站收缩栏营销活动策划方案
  • 苏州公司网站制作公司重庆森林经典台词截图
  • 网站建设一条龙网店代运营诈骗
  • 静态旅游网站网站建设服务
  • 网站上传为什么大小限制百度开店怎么收费
  • 如何做属于自己的网站学编程的正规学校
  • 设计网站推广的广告语搜狗推广平台
  • 设计营销型网站域名互联网营销师证书怎么考
  • wap网站制作开发公司5118数据分析平台官网
  • 六安网站推广获客app新闻今天
  • 贵州新闻网站网络推广seo赚钱培训
  • 网站建设日程表图片无排名优化
  • 什么企业网站能自己做网站模板设计
  • 谢馥春网站建设的优势企业网站优化
  • 电商网站建设求职定位seo公司关键词
  • 深圳网站建设公司官网互联网营销师证书有用吗
  • 问答社交网站开发网络销售网站