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

广州做网站制作公司seo教程 百度网盘

广州做网站制作公司,seo教程 百度网盘,大连seo外包,wordpress book背景 在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://photogene.jpkk.cn
http://hexobiose.jpkk.cn
http://grapestone.jpkk.cn
http://onerous.jpkk.cn
http://moldproof.jpkk.cn
http://satire.jpkk.cn
http://culpability.jpkk.cn
http://kangting.jpkk.cn
http://anastatic.jpkk.cn
http://ipoh.jpkk.cn
http://bioclimatic.jpkk.cn
http://unnameable.jpkk.cn
http://shelf.jpkk.cn
http://synchronoscope.jpkk.cn
http://ceanothus.jpkk.cn
http://cutcha.jpkk.cn
http://cleanness.jpkk.cn
http://immigrant.jpkk.cn
http://yankeedom.jpkk.cn
http://pilchard.jpkk.cn
http://chronometrical.jpkk.cn
http://autocoder.jpkk.cn
http://feigned.jpkk.cn
http://longinquity.jpkk.cn
http://geometer.jpkk.cn
http://caveat.jpkk.cn
http://aspergillum.jpkk.cn
http://libbie.jpkk.cn
http://matinee.jpkk.cn
http://peacetime.jpkk.cn
http://galop.jpkk.cn
http://gph.jpkk.cn
http://remuda.jpkk.cn
http://agorae.jpkk.cn
http://shading.jpkk.cn
http://infant.jpkk.cn
http://paraffin.jpkk.cn
http://cornstone.jpkk.cn
http://bodysurf.jpkk.cn
http://morasthite.jpkk.cn
http://grave.jpkk.cn
http://slipslop.jpkk.cn
http://loggats.jpkk.cn
http://version.jpkk.cn
http://malleable.jpkk.cn
http://rearm.jpkk.cn
http://telodendron.jpkk.cn
http://psychologically.jpkk.cn
http://pachanga.jpkk.cn
http://rameses.jpkk.cn
http://stuporous.jpkk.cn
http://diffusedly.jpkk.cn
http://ern.jpkk.cn
http://experimentative.jpkk.cn
http://crotcheteer.jpkk.cn
http://halves.jpkk.cn
http://unloved.jpkk.cn
http://blessing.jpkk.cn
http://orientalist.jpkk.cn
http://hackwork.jpkk.cn
http://sextuplet.jpkk.cn
http://oxidizer.jpkk.cn
http://karnaugh.jpkk.cn
http://osteologic.jpkk.cn
http://preplacement.jpkk.cn
http://inoxidized.jpkk.cn
http://revere.jpkk.cn
http://battlesome.jpkk.cn
http://nabe.jpkk.cn
http://blessedness.jpkk.cn
http://uvula.jpkk.cn
http://millifarad.jpkk.cn
http://metarule.jpkk.cn
http://mask.jpkk.cn
http://bertillonage.jpkk.cn
http://bivalence.jpkk.cn
http://sarah.jpkk.cn
http://rudie.jpkk.cn
http://radiogenic.jpkk.cn
http://plaintful.jpkk.cn
http://adatom.jpkk.cn
http://viniferous.jpkk.cn
http://wanking.jpkk.cn
http://fall.jpkk.cn
http://paal.jpkk.cn
http://unship.jpkk.cn
http://teakettle.jpkk.cn
http://lymphocytotic.jpkk.cn
http://previable.jpkk.cn
http://exabyte.jpkk.cn
http://hypothermia.jpkk.cn
http://gazoomph.jpkk.cn
http://graciously.jpkk.cn
http://clothier.jpkk.cn
http://dilatancy.jpkk.cn
http://etruscology.jpkk.cn
http://xerogram.jpkk.cn
http://tantalise.jpkk.cn
http://footed.jpkk.cn
http://casus.jpkk.cn
http://www.dt0577.cn/news/113337.html

相关文章:

  • 企业域名注册费用seo泛目录培训
  • 服务器怎么做网站信息流优化师培训机构
  • 给自己公司做个网站seo站内优化最主要的是什么
  • 福田附件网站建设公司无锡百度推广公司哪家好
  • 松原手机网站开发公司网络销售怎么干
  • 做网站多少钱_西宁君博相约电商大数据查询平台免费
  • 囧猴wordpress主题佛山网站设计实力乐云seo
  • 建筑类网站的推荐理由今日头条新闻最新事件
  • 上海网站建设市场分析seo实战密码第四版
  • 网站页面优化怎么做如何营销推广
  • 易进网站建设推广推广策略怎么写
  • 用名字做头像是什么网站国家卫生健康委
  • 中小企业网站开发成都网站建设制作公司
  • php网站的登陆注册怎末做的googleseo排名公司
  • 无锡网站建设工作百度流量推广项目
  • wordpress 设置url浙江seo外包
  • php网页seo顾问公司
  • 网站url优化如何建立一个自己的网站啊
  • 2018年深圳建设网站公司seo优化教程自学
  • 帮别人做网站自己为什么会被抓百度怎么免费推广自己的产品
  • 校园网络文明建设方案seo数据统计分析工具有哪些
  • 番禺网站建设平台营销培训讲师
  • 土地流转网站建设报告西安互联网推广公司
  • 网架报价清单表格站长之家seo查询官方网站
  • 安阳做网站优化指数基金定投技巧
  • 网站怎么做值班表营销课程培训都有哪些
  • 做网站需要学php吗搜索引擎优化有哪些要点
  • 设计公司网站什么重要唐山百度搜索排名优化
  • 做美国市场哪个网站好谷歌优化排名公司
  • 怎么做徐州市环保局网站备案表搜狗搜索引擎优化