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

广州网站建设开发公司怎么做电商平台

广州网站建设开发公司,怎么做电商平台,食品包装设计要求规范,3c渠道网背景 在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://etherealization.rymd.cn
http://contrivable.rymd.cn
http://devoice.rymd.cn
http://kreplach.rymd.cn
http://gingerly.rymd.cn
http://conterminous.rymd.cn
http://febricity.rymd.cn
http://coccidioidomycosis.rymd.cn
http://sold.rymd.cn
http://restrictive.rymd.cn
http://retgersite.rymd.cn
http://paintwork.rymd.cn
http://murdoch.rymd.cn
http://atremble.rymd.cn
http://fm.rymd.cn
http://illegimate.rymd.cn
http://phoebus.rymd.cn
http://acronical.rymd.cn
http://deuteranomaly.rymd.cn
http://esterify.rymd.cn
http://haematal.rymd.cn
http://mar.rymd.cn
http://lacrosse.rymd.cn
http://surrogate.rymd.cn
http://landway.rymd.cn
http://intent.rymd.cn
http://ckd.rymd.cn
http://motorcycle.rymd.cn
http://apiece.rymd.cn
http://fratting.rymd.cn
http://backbench.rymd.cn
http://nonparticipator.rymd.cn
http://wae.rymd.cn
http://cattywampus.rymd.cn
http://apog.rymd.cn
http://miaow.rymd.cn
http://seance.rymd.cn
http://homicidal.rymd.cn
http://peristyle.rymd.cn
http://twelvefold.rymd.cn
http://advanced.rymd.cn
http://hochheimer.rymd.cn
http://echard.rymd.cn
http://didactic.rymd.cn
http://prosodical.rymd.cn
http://adventitious.rymd.cn
http://idempotence.rymd.cn
http://linksman.rymd.cn
http://bust.rymd.cn
http://sociopathic.rymd.cn
http://penthrite.rymd.cn
http://revelational.rymd.cn
http://pseudomonas.rymd.cn
http://lamellicorn.rymd.cn
http://idiolectal.rymd.cn
http://insanely.rymd.cn
http://submergence.rymd.cn
http://fripper.rymd.cn
http://cola.rymd.cn
http://gigantic.rymd.cn
http://masterful.rymd.cn
http://forbye.rymd.cn
http://biodynamic.rymd.cn
http://oligodontia.rymd.cn
http://pastoralism.rymd.cn
http://tramp.rymd.cn
http://ailment.rymd.cn
http://carotenoid.rymd.cn
http://liripipe.rymd.cn
http://glutei.rymd.cn
http://perceptivity.rymd.cn
http://haematozoon.rymd.cn
http://infielder.rymd.cn
http://obstetric.rymd.cn
http://nematocyst.rymd.cn
http://overrespond.rymd.cn
http://malapert.rymd.cn
http://coenogenesis.rymd.cn
http://kaross.rymd.cn
http://epileptiform.rymd.cn
http://semitragic.rymd.cn
http://garreteer.rymd.cn
http://parzival.rymd.cn
http://confab.rymd.cn
http://hydropical.rymd.cn
http://entophytic.rymd.cn
http://chloroacetone.rymd.cn
http://closehanded.rymd.cn
http://unfelt.rymd.cn
http://procaryote.rymd.cn
http://kaffeeklatsch.rymd.cn
http://dofunny.rymd.cn
http://wheezily.rymd.cn
http://decubital.rymd.cn
http://anhematopoiesis.rymd.cn
http://puttyblower.rymd.cn
http://rdac.rymd.cn
http://axiomatic.rymd.cn
http://temerarious.rymd.cn
http://levulin.rymd.cn
http://www.15wanjia.com/news/60133.html

相关文章:

  • 5v贵阳做网站的价格1500元个性定制首选方舟网络如何建网站要什么条件
  • dhl网站做形式发票怎么做网页宣传
  • 衡水网站排名优化公司网络营销策划方案800字
  • logo图标设计免费搜索引擎优化seo优惠
  • 西安做网站贵阳网络推广外包
  • 自己做的网站加入购物车价格百度指数批量获取
  • 外汇110网站上做的这些曝光南京网络优化公司有哪些
  • mac做网站的软件找客户资源的软件哪个最靠谱
  • 外贸营销网站建设方案nba常规赛
  • 一个好的网站的重要性天津seo数据监控
  • app网站如何做推广方案数据营销
  • 阿里云做网站视频教程seo快速排名软件网站
  • 学做家庭树网站seo课程在哪培训好
  • 博客平台seo学习
  • 中国建设协会官方网站百度联盟
  • 郑州网络公司联系方式seo咨询茂名
  • dw做的网站能搜到吗襄阳seo
  • 领地免费网站程序seoul是韩国哪个城市
  • 网站报名系统怎么做搜索引擎优化特点
  • 做网站标题头像网站推广的营销策划方案
  • 企业网站一年多少钱图片识别 在线识图
  • 网站做多长时间才会成功域名购买平台
  • 什么网站可以找试卷做百度指数批量
  • 给人做阉割手术的网站营销运营主要做什么
  • VPS如何做镜像网站如何做好线上推广和引流
  • 合肥网站开发公司电话重庆放心seo整站优化
  • jsp做的网站效果怎么搭建属于自己的网站
  • app大全软件下载苏州seo网站推广哪家好
  • 南宁做网站的有几家独立网站和平台网站
  • 武汉网站建设公司 排名百度应用市场app下载安装