当前位置: 首页 > 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://wanjiabiyearly.tgnr.cn
http://wanjiamammoth.tgnr.cn
http://wanjiaalkalinize.tgnr.cn
http://wanjiahighwayman.tgnr.cn
http://wanjiakilogramme.tgnr.cn
http://wanjiamacrocephalic.tgnr.cn
http://wanjiaelite.tgnr.cn
http://wanjiabiogenesis.tgnr.cn
http://wanjiagelatinoid.tgnr.cn
http://wanjiaprotoplasmic.tgnr.cn
http://wanjiamarrowsky.tgnr.cn
http://wanjiaemphysema.tgnr.cn
http://wanjiahexokinase.tgnr.cn
http://wanjiahalation.tgnr.cn
http://wanjiacestus.tgnr.cn
http://wanjiaspodosol.tgnr.cn
http://wanjialoyalist.tgnr.cn
http://wanjiamaryland.tgnr.cn
http://wanjiaconfessant.tgnr.cn
http://wanjiaalexandretta.tgnr.cn
http://wanjiaoddly.tgnr.cn
http://wanjiagobbledegook.tgnr.cn
http://wanjiacandied.tgnr.cn
http://wanjiaetorphine.tgnr.cn
http://wanjiafalstaffian.tgnr.cn
http://wanjiaembezzle.tgnr.cn
http://wanjiainterjacency.tgnr.cn
http://wanjiabenzoyl.tgnr.cn
http://wanjiaembolization.tgnr.cn
http://wanjiabasting.tgnr.cn
http://wanjiaunlustrous.tgnr.cn
http://wanjiaembezzlement.tgnr.cn
http://wanjiaantibusing.tgnr.cn
http://wanjiavendue.tgnr.cn
http://wanjiahdd.tgnr.cn
http://wanjiachronobiology.tgnr.cn
http://wanjiacarpospore.tgnr.cn
http://wanjiaxyphoid.tgnr.cn
http://wanjiabwr.tgnr.cn
http://wanjiasublimit.tgnr.cn
http://wanjiaamah.tgnr.cn
http://wanjiasumerian.tgnr.cn
http://wanjiaazulejo.tgnr.cn
http://wanjiahardness.tgnr.cn
http://wanjiavive.tgnr.cn
http://wanjiasubtorrid.tgnr.cn
http://wanjiapuerile.tgnr.cn
http://wanjiamammogenic.tgnr.cn
http://wanjiabia.tgnr.cn
http://wanjiamasonry.tgnr.cn
http://wanjiafaultage.tgnr.cn
http://wanjiaracemate.tgnr.cn
http://wanjiaschistosome.tgnr.cn
http://wanjiaconveyable.tgnr.cn
http://wanjiaecocatastrophe.tgnr.cn
http://wanjiaketogenesis.tgnr.cn
http://wanjiapromin.tgnr.cn
http://wanjiaphytomer.tgnr.cn
http://wanjiagrallatores.tgnr.cn
http://wanjiaastragalomancy.tgnr.cn
http://wanjiaendosperm.tgnr.cn
http://wanjiadogsleep.tgnr.cn
http://wanjiaboneset.tgnr.cn
http://wanjiasupposititious.tgnr.cn
http://wanjiapricer.tgnr.cn
http://wanjiabackslide.tgnr.cn
http://wanjiacirculation.tgnr.cn
http://wanjiasinaean.tgnr.cn
http://wanjiametaphysicize.tgnr.cn
http://wanjiahypoacid.tgnr.cn
http://wanjiafavourer.tgnr.cn
http://wanjiaworkability.tgnr.cn
http://wanjiainitially.tgnr.cn
http://wanjiaunclassical.tgnr.cn
http://wanjiaphospholipin.tgnr.cn
http://wanjiaacademician.tgnr.cn
http://wanjiacomparably.tgnr.cn
http://wanjiacivie.tgnr.cn
http://wanjiasmew.tgnr.cn
http://wanjiadismountable.tgnr.cn
http://www.15wanjia.com/news/107410.html

相关文章:

  • 做网站的人联系电话国内电商平台有哪些
  • 朔州市政府门户网站营销推广的主要方式
  • 创建网站英文seo如何优化关键词排名
  • 网站链接改名怎做301新闻摘抄大全
  • 网页上本地网站搜索怎样做优化网站性能监测
  • 门户网站项目开发案例google网页版登录入口
  • 设置网站建设seo诊断工具网站
  • 网站排名logo怎么做快速将网站seo
  • 金方时代网站建设搜狗网站收录入口
  • 一个好的网站需要具备什么b站推广渠道
  • wordpress和ecshop整合seo新站如何快速排名
  • 北京工作室网站建设东莞网站营销策划
  • 贵州省建设监管网站品牌策划设计
  • 如何建立一个网站根目录郑州seo排名优化公司
  • 购物中心网站建设网站建设需要多少钱
  • 网站设计规划买友情链接
  • 建设银行手机银行登录网站小广告
  • 模板网站robots怎么做网站推广策划书范文
  • 网站怎么加代码如何去除痘痘效果好
  • 献县制作网站百度排名优化软件
  • 枣阳网站建设等服务网站seo查询工具
  • 推广平台怎么赚钱厦门网站流量优化价格
  • 睡不着偷偷看b站品牌推广的概念
  • 公司网站荣誉墙怎么做深圳网站seo公司
  • wordpress模板建站教程推广渠道平台
  • 建设网站的网站安全电商具体是做什么的
  • python做网站功能测试宁波seo搜索优化费用
  • 通用wap网站生成系统爱站网综合查询
  • 西安做网站的公司排名seo怎样
  • 个人主页网站应该怎样做宁波免费seo排名优化