范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

如何从Kafka看时间轮算法设计

  从 Kafka 看时间轮算法设计前言
  Kafka 中有很多延时操作,比如对于耗时的网络请求(比如 Produce 是等待 ISR 副本复制成功)会被封装成 DelayOperation 进行延迟处理操作,防止阻塞 Kafka请求处理线程。
  Kafka 没有使用 JDK 自带的 Timer 和 DelayQueue 实现。因为时间复杂度上这两者插入和删除操作都是 O(logn),不能满足 Kafka 的高性能要求。
  冷知识:JDK Timer 和 DelayQueue 底层都是个优先队列,即采用了 minHeap 的数据结构,最快需要执行的任务排在队列第一个,不一样的是 Timer 中有个线程去拉取任务执行,DelayQueue 其实就是个容器,需要配合其他线程工作。ScheduledThreadPoolExecutor 是 JDK 的定时任务实现的一种方式,其实也就是 DelayQueue + 池化是线程的一个实现。
  Kafka 基于时间轮实现了延时操作,时间轮算法的插入删除操作都是 O(1) 的时间复杂度,满足了 Kafka 对于性能的要求。除了 Kafka 以外,像 Netty 、ZooKeepr、Dubbo 这样的开源项目都有使用到时间轮的实现。
  那么时间轮回算法是怎么样的,算法思想是什么?Kafka 中又是怎么实现它的。  Kafka 时间轮算法
  时间轮回的算法思想可以通过我们日常生活中的钟表来理解。
  Kafka 中的时间轮(TimingWheel)是一个存储定时任务的环形队列,底层采用数组实现,数组中的每个元素可以存放一个定时任务列表(TimerTaskList)。TimerTaskList是一个环形的双向链表,链表中的每一项表示的都是定时任务项(TimerTaskEntry),其中封装了真正的定时任务(TimerTask)。
  图中的几个参数:  tickMs: 时间跨度  wheelSize: 时间轮回 bucket 的个数  startMs: 开始时间  interval:时间轮的整体时间跨度 = tickMs * wheelSize  currentTime: tickMs 的整数倍,代表时间轮当前所处的时间  currentTime可以将整个时间轮划分为到期部分和未到期部分,currentTime当前指向的时间格也属于到期部分,表示刚好到期,需要处理此时间格所对应的TimerTaskList中的所有任务
  整个时间轮的总体跨度是不变的,随着指针currentTime的不断推进,当前时间轮所能处理的时间段也在不断后移,总体时间范围在currentTime和currentTime+interval之间。
  现在你可能会有疑问,这个抽象的 currentTime 怎么推进呢,别急着看下文  那么如何支持大跨度的定时任务呢?
  如果要支持几十万毫秒的定时任务,难不成要扩容时间轮的那个数组?实际上这里有两种解决方案:  使用增加轮次/圈数的概念(Netty 的 HashedWheelTimer )  举例来说,比如目前是 "0-7" 8个槽,41 % 8 + 1 = 2,即应该放在槽位是 2,下标是 1 的位置。然后 ( 41 - 1 ) / 8 = 5,即轮数记为 5。也就是说当循环 5 打开之后扫到下标的 1 的这个槽位会触发这个任务。  具体实现细节这里不详述  使用多层时间轮回的概念 (Kafka 的 TimingWheel)  相较于上个方案,层级时间轮能更好控制时间粒度,可以应对更加复杂的定时任务处理场景,适用的范围更广;
  多层时间轮回就更像我们钟表的概念了。秒针走的一圈、分针走的一圈和时针走的一圈就形成了一个多层时间轮的关系。
  第N层时间轮走了一圈,等于 N+1 层时间轮走一格。即高一层时间轮的时间跨度等于当前时间轮的整体跨度。
  在任务插入时,如果第一层时间轮不满足条件,就尝试插入到高一层的时间轮,以此类推。
  随着时间推进,也会有一个时间轮降级的操作,原本延时较长的任务会从高一层时间轮重新提交到时间轮中,然后会被放在合适的低层次的时间轮当中等待处理;  在 Kafka 中时间轮之间如何关联呢,如果展现这种高一层的时间轮关系?
  其实很简单就是一个内部对象的指针,指向自己高一层的时间轮对象。  另外还有一个问题,如何推进时间轮的前进,让时间轮的时间往前走。Netty 中的时间轮是通过工作线程按照固定的时间间隔 tickDuration 推进的  如果长时间没有到期任务,这种方案会带来推进的问题,从而造成一定的性能损耗;  Kafka 则是通过 DelayQueue 来推进,是一种空间换时间的思想;  DelayQueue 中保存着所有的 TimerTaskList 对象,根据时间来排序,这样延时越小的任务排在越前面。  外部通过一个线程(叫做ExpiredOperationReaper)从 DelayQueue 获取超时的任务列表 TimerTaskList,然后根据 TimerTaskList 的   过期时间来精确推进时间轮的时间   ,这样就不会存在空推进的问题啦。  其实 Kafka 采用的是一种权衡的策略,把 DelayQueue 用在了合适的地方。DelayQueue 只存放了 TimerTaskList,并不是所有的 TimerTask,数量并不多,相比空推进带来的影响是利大于弊的。总结Kafka 使用时间轮来实现延时队列,因为其底层是任务的添加和删除是基于链表实现的,是 O(1) 的时间复杂度,满足高性能的要求;  对于时间跨度大的延时任务,Kafka 引入了层级时间轮,能更好控制时间粒度,可以应对更加复杂的定时任务处理场景;  对于如何实现时间轮的推进和避免空推进影响性能,Kafka 采用空间换时间的思想,通过 DelayQueue 来推进时间轮,算是一个经典的 trade off。
  本文通过 Kafka 来讲述了时间轮的算法设计思想,其中还提到了 Netty 时间轮算法的实现,可能会比较偏向理论,推荐去阅读一下 Kafka 和 Netty 时间轮实现的源码,并不是特别难,对比起来看会更有收获。
  原文 https://ricstudio.top/archives/timewheel-in-kafka

小米老粉立8月16日为集体脱粉日!140万用户被踢出内测组不知道是不是因为高处不胜寒,站上了全球手机销量第一的宝座额小米最近风波不断。8月16日,大批小米粉丝在雷军微博下留言,称要集体脱粉,甚至自发性的将这一天立为集体脱粉日。事情是这样的小红书或再次融资,商业化与用户体验仍是两难近期,国内种草社区赛道可谓是动作频频,前有陌陌推出树莓进军这一领域,后有消息称小红书将暂停在上市进程,也引发了外界的众多关注。在这其中,作为新人的树莓能否在激烈的市场竞争中占据一席Linux系列之四用户与用户组1linux的用户与用户组1。1概述Linux是一个真实的完整的多用户多任务操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同台积电市值超腾讯,为亚洲第一(观察者网讯)据美国消费者新闻与商业频道(CNBC)8月18日报道,台积电市值目前已超过腾讯,位列亚洲第一。截至18日上午的数据,台积电目前在亚洲公司中市值最高,超过5380亿美元小度智能巨屏电视V86发布,尝鲜价8888元8月18日,百度宣布,小度智能巨屏电视V86正式发布,目前已经在小度商城京东平台开启限量预售,尝鲜价8888元。小度智能巨屏电视V86配备86英寸4K屏幕,支持120Hz高刷新率,华为P50Pro开卖,看了网友评价,果断入手华为Mate40Pro关于华为P50系列机型,可谓是历经磨难,好在华为拥有异常强大的实力,在克服种种困难之下,终于发布。作为最强拍照旗舰,一经发布就登顶DXO榜首,华为P50系列深受用户欢迎,热度相当高我一天只有24小时,哪里还有时间去实体店?实体店生意越来越不好是为啥实体店生意越来越不好为啥?读完本文你可能就知道为什么了?店铺开门做生意好与坏,与两件事有关一个是客流,一个是成交率与平均客单价。凡是两者都好时,生意一定好iPhone13最新渲染图曝光还买什么小米MIX4中关村在线消息早些时候小米MIX4发布之际,好多网友表示颜值大赞性能无敌等等高评价,甚至还表示白给iPhone都不要。不过今天看到外网传来的最新iPhone13渲染图,我觉得真没必暴跌1600元,索尼IMX6868GB128GB无线充电,体验不输小米10S最近有网友私信我说,自己的预算比较有限,在网上看到小米10S的销量和口碑都不错,自己的预算只够买红米K40Pro,听说小米10S的体验会比红米K40Pro更加出色,问我该不该加价买智慧清洁神器睿米NEXVX,带来全新清洁体验,颠覆传统随着科技的发展,生活水平的提高,人们越来越追求便捷的生活方式。都说科技助力生活,这也体现在助力家庭卫生清扫上。因为平时清洁打扫既要扫地吸尘还要拖地,清洁非常繁琐,所以吸拖一体的吸尘华为最新发声!生存没有问题绝对不会放弃海外市场手机王座终将归来8月17日,华为心声社区发布华为轮值董事长郭平与新员工座谈纪要在历史大转折中遇见更好的自己。郭平表示,他大概是华为第一个应届新员工,然后一留就留了三十多年。他刚加入华为不久后,因为
只需要两款测试仪,就可判断苹果充电器和快充线真伪做这个测试的背景是这样的最近买了个移动电源,商家宣称是MFi的,看了下头确实是C94的镀铑,可连iPad就是弹框。然后就想到了两种可能C94头是仿冒的,但是都标注MFi了,而且头看家庭教育新篇章大力智能助力家长打造自主自信有爱的披风少年家庭教育是人生的第一课,是所有教育的起点和基础。在结束不久的全国两会中,有代表提出为家庭教育立法,家庭教育的相关话题也越来越受到社会广泛的关注。在515国际家庭日来临之际,为探讨家拒绝躺赢锐意破局为什么ThinkBook敢于喊出新青年的反卷态度?在PC界,也许只有以思考重构世界的ThinkBook能把一场发布会办成思想碰撞会。6月1日下午1500,联想ThinkBook夏季新品发布会在全网直播。衔接去年新青年,新前途的品牌京东618全面启动1000个新品类增长超100碳排放同比降低55月20日,在第18个京东618来临之际,以让热爱不止于消费为主题的2021京东618,18周年庆启动暨趋势发布会在北京举行,国内外数百名知名品牌商家合作伙伴代表与京东共同开启20家生活战略延展升级国美携手打扮家开创透明家装新格局国美家生活战略2。0阶段又推出重要落子。4月29日下午两点,BIM智能装修平台国美X打扮家家居家装战略暨APP上线发布会在北京雁栖湖国际会议中心隆重举行。来自行业协会的领导供应链伙致敬时代先锋ThinkPad家族系列新品正式发布,引领商务笔电新方向4月22日,联想以你好先锋为主题,在北京正式召开了ThinkPadFamily2021春季新品发布会。在这场堪称PC行业盛典的发布会上,ThinkPad推出了备受瞩目的至薄之刃X1酷开科技发布新品这是一块从体验出发真正打破边界的屏在各个平台都积蓄了海量收藏却从不回顾?每每要分享信息却受限于系统差异无法互通?这些日常生活工作中随处可见的场景,在互联网蓬勃发展多年之后仍然是痛点问题,体验与多年之前无异,打通大小科技创新持续加码高途集团重新定义教育场景4月22日,在线教育上市公司跟谁学在北京国家会议中心召开媒体发布会,宣布更名为高途集团。更名后,高途集团K12在线教育品牌为高途课堂,成人在线教育品牌为高途学院。高途集团是中国第一做微信小程序开发为什么选得有店?细数这六大原因自从微信小程序出世至今,做微信小程序开发的公司越来越多,在那么多开发公司中,对于没有专业技术的商家该如何选择?得有店又有什么优势值得商家选择?1,得有店操作简单得有店,可视化操作,网装时代正当时土巴兔率先缔造网装时代2。0小红书平台作为KOC高发聚集地,近两年可以算是以种草抢尽了风头。不仅用户活性大,也被称为素人最易发家的平台之一。而家装话题则更占据了小红书热门话题的半壁江山,很多不到万粉的萌新博主2021上海国际广告节开启酷开科技缘何成为OTT独家合作媒体?7月21日,2021上海国际广告节暨数字广告高峰论坛正式开幕。今年的广告节主题是引领行业数字化转型,涵盖高峰论坛颁奖典礼展览展示和新锐挑战营四大板块。数字化转型,这看起来是一个近年