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

大型门户网站建设需要哪些技术优化排名

大型门户网站建设需要哪些技术,优化排名,北京人事考试网,个人建站需要多少钱背景 当flink消费kafka的消息时,我们经常会用到FlinkKafkaConsumer进行水位线的发送,本文就从源码看下FlinkKafkaConsumer.assignTimestampsAndWatermarks指定周期性水位线发送的流程 FlinkKafkaConsumer水位线发送 1.首先从Fetcher类开始&#xff0c…

背景

当flink消费kafka的消息时,我们经常会用到FlinkKafkaConsumer进行水位线的发送,本文就从源码看下FlinkKafkaConsumer.assignTimestampsAndWatermarks指定周期性水位线发送的流程

FlinkKafkaConsumer水位线发送

1.首先从Fetcher类开始,创建Fetcher类的时候会构建一个周期性的水位线发送线程并启动

        // if we have periodic watermarks, kick off the interval schedulerif (timestampWatermarkMode == WITH_WATERMARK_GENERATOR && autoWatermarkInterval > 0) {PeriodicWatermarkEmitter<T, KPH> periodicEmitter =new PeriodicWatermarkEmitter<>(checkpointLock,subscribedPartitionStates,watermarkOutputMultiplexer,processingTimeProvider,autoWatermarkInterval);periodicEmitter.start();}

2.随后,PeriodicWatermarkEmitter中注册处理时间定时器,周期性执行

        public void start() {timerService.registerTimer(timerService.getCurrentProcessingTime() + interval, this);}@Overridepublic void onProcessingTime(long timestamp) {synchronized (checkpointLock) {for (KafkaTopicPartitionState<?, ?> state : allPartitions) {// 这里当前算子任务消费的kafka 分区分别记录每个分区的水位值state.onPeriodicEmit();}//这里当前算子会把自己消费的kafka分区的所有水位线取最小值后当成当前算子任务自身的水位线发送出去,注意这里是当前算子任务级别的watermarkOutputMultiplexer.onPeriodicEmit();}// schedule the next watermarktimerService.registerTimer(timerService.getCurrentProcessingTime() + interval, this);}}

3.对应state.onPeriodicEmit();记录每个kafka分区的水位线方法

    @Overridepublic void onPeriodicEmit(WatermarkOutput output) {final org.apache.flink.streaming.api.watermark.Watermark next = wms.getCurrentWatermark();if (next != null) {output.emitWatermark(new Watermark(next.getTimestamp()));}}
其中 WatermarkOutput output.emitWatermark(new Watermark(next.getTimestamp()))代码如下:public DeferredOutput(OutputState state) {this.state = state;}@Overridepublic void emitWatermark(Watermark watermark) {state.setWatermark(watermark.getTimestamp());}
所以这里最终效果只是对应state(kafka分区[注意,一个算子任务有可能消费好几个kafka分区])上设置了水位线/*** Returns true if the watermark was advanced, that is if the new watermark is larger than* the previous one.** <p>Setting a watermark will clear the idleness flag.*/public boolean setWatermark(long watermark) {this.idle = false;final boolean updated = watermark > this.watermark;// 这里也可以看出来,即使代码里面发送了更小值的水位线,水位线也不会回退this.watermark = Math.max(watermark, this.watermark);return updated;}        

4.对应算子任务组合当前任务消费的所有分区水位线的方法

private void updateCombinedWatermark() {long minimumOverAllOutputs = Long.MAX_VALUE;boolean hasOutputs = false;boolean allIdle = true;for (OutputState outputState : watermarkOutputs) {if (!outputState.isIdle()) {minimumOverAllOutputs = Math.min(minimumOverAllOutputs, outputState.getWatermark());allIdle = false;}hasOutputs = true;}// if we don't have any outputs minimumOverAllOutputs is not valid, it's still// at its initial Long.MAX_VALUE state and we must not emit that// 如果算子任务不消费任何分区,它不会发出任何水位线,这里是不是就是kafka消费者要小于kafka主题的原因所在???if (!hasOutputs) {return;}if (allIdle) {// 如果当前算子任务处于空闲时间,标识空闲,以便后续算子可以继续推进underlyingOutput.markIdle();} else if (minimumOverAllOutputs > combinedWatermark) {combinedWatermark = minimumOverAllOutputs;underlyingOutput.emitWatermark(new Watermark(minimumOverAllOutputs));}}```
http://www.mmbaike.com/news/31939.html

相关文章:

  • wordpress网站怎么进入网站推广开户
  • 平易云 网站建设凡科建站官网免费注册
  • 眼镜网站怎么做百度热搜榜排名今日p2p
  • 个人网站布局下载谷歌外链
  • 个人网站需求分析优化大师下载安装免费
  • 网站从建设到上线流程做推广的公司
  • 宁波网站建设c nb方法seo
  • 做网站买别人的服务器网站seo优化有哪些方面
  • 宝安做棋牌网站建设免费二级域名平台
  • 专业网站设计制作服务竞价排名采用什么计费方式
  • 西安网站手机网站建设百度知道推广软件
  • wordpress博客 文章格式seo怎么做优化排名
  • 360平台怎么做网站优化百度搜索量最大的关键词
  • 温州网站建设这个全网最低价24小时自助下单平台
  • 唐河企业网站制作怎么样企业培训心得
  • 注册公司制作网站网页制作的步骤
  • 成都网站制作价格百度有哪些app产品
  • 营销型网站建设一般包含哪些内容浏览器下载安装2023版本
  • 郑州做网站的多不多推广团队
  • 做网站建设公司起名百度关键词优化软件网站
  • 网站上面的彩票快3怎么做网站收录是什么意思
  • ur网站建设网站推广优化怎样
  • 学生做网站软件广告软文范例200字
  • 中国建设招标网网站首页seo站内优化包括
  • 涉县网站设计seo怎么优化步骤
  • 上海网站建设书生商友广告投放方式
  • 专业做营销网站建设世界杯比分查询
  • 高端网站建设kgwl友情链接交换形式
  • 网站建设费用计入固定资产产品如何做网络推广
  • 网站建设 文档下载智能营销方法