游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

消息队列之Kafka从架构技术重新理解Kafka

  ApacheKafka是一个分布式流处理平台。这到底意味着什么呢?
  我们知道流处理平台有以下三种特性:可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。可以储存流式的记录,并且有较好的容错性。可以在流式记录产生时就进行处理。
  Kafka适合什么样的场景?
  它可以用于两大类别的应用:构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。(相当于messagequeue)构建实时流式应用程序,对这些流数据进行转换或者影响。(就是流处理,通过kafkastreamtopic和topic之间内部进行变化
  Kafka有四个核心的API:TheProducerAPI允许一个应用程序发布一串流式的数据到一个或者多个Kafkatopic。TheConsumerAPI允许一个应用程序订阅一个或多个topic,并且对发布给他们的流式数据进行处理。TheStreamsAPI允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。TheConnectorAPI允许构建并运行可重用的生产者或者消费者,将Kafkatopics连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。
  在Kafka中,客户端和服务器使用一个简单、高性能、支持多语言的TCP协议。此协议版本化并且向下兼容老版本,我们为Kafka提供了Java客户端,也支持许多其他语言的客户端。
  以上摘自ApacheKafka官网
  而本文关注的焦点是:构造实时流数据管道,即messagequeue部分。也就是我们常使用的消息队列部分,这部分本身也是Kafka最初及最基本的底层设计。
  让我们回到最初Kafka还没有设计出来的时候,通过重新设计Kafka,一步步了解为什么Kafka是我们现在看到的样子,到时我们将了解到Kafka作为消息队列会高吞吐量、分布式、高容错稳定。我们把这个项目命名为:KafkaR。
  现在我们开始设计KafkaR,我们正式设计KafkaR之前需要考虑设计目标,也就是我的KafkaR设计出来到底是用来干嘛的,适用于什么业务场景,解决什么需求痛点。
  可以很快想到:数据交换。这是消息队列的基本功能与要求。
  然后呢?可以作为个大平台,支持多语言,最好能满足大公司的业务需求,而且最好是实时的,至少是低延迟。
  概括起来就是:我们设计KafkaR的目标是可以作为一个统一的平台来处理大公司可能拥有的所有实时数据馈送。
  为了满足我们的KafkaR的设计目标,那么KafkaR需要具备以下这些特征:
  具有高吞吐量来支持高容量事件流。
  能够正常处理大量的数据积压,以便支持来自离线系统的周期性数据加载。
  系统必须处理低延迟分发,来处理更传统的消息传递用例。
  数据馈送分区与分布式,以及实时。
  系统在出现机器故障时能够保证容错。一、数据的存储方式inmemoryindisk
  有两种选择:第一种,使用inmemorycache,并在空间不足的的时候将数据flush到文件系统中。
  另外一种,使用indisk,一开始把所有的数据写入文件系统的持久化日志中。
  我们的KafkaR采用indisk。实际上在此情况数据被转移到了内核的pagecache中。
  磁盘速度慢是人们的普遍印象,那么KafkaR的数据存储和缓存基于文件系统,这样的性能能够接受吗?
  而事实是,磁盘的速度比人们预期的要慢得多,也快得多,取决于人们使用磁盘的方式。
  我们知道磁盘有顺序读和随机读两种模式,之间的性能差异很大,但具体差距多少呢?
  使用6个7200rpm、SATA接口、RAID5的磁盘阵列在JBOD配置下的顺序写入的性能约为600MB秒,但随机写入的性能仅约为100k秒,相差6000倍。
  线性的读取和写入是磁盘使用模式中最有规律的,并且操作系统进行了大量的优化。现代操作系统提供了readahead和writebehind技术,readahead是以大的datablock为单位预先读取数据,而writehehind将多个小型的逻辑写合并成一次大型的物理磁盘写入。
  磁盘除了访问模式,还有两个低效率操作影响系统的性能:大量的小型IO操作,过多的字节拷贝。
  那么我们怎么处理这些问题呢?
  针对于大量的小型IO操作,KafkaR使用消息块将消息合理分组。使网络请求将多个消息打包成一组,而不是每次发送一条消息,从而使整组消息分担网络往返的开销。
  另一个过多的字节拷贝,KafkaR使用producer,broker和consumer都共享的标准化通用的二进制消息格式,这样数据块不用修改就能在他们之间传递。
  保持这种通用的格式有什么用呢?
  可以对持久化日志块的网络传输进行优化。现代的unix操作系统提供了一个高度优化的编码方式,用于将数据从pagecache转移到socket网络连接中。
  数据从文件到套接字的常见数据传输过程:磁盘pagecache用户空间缓存区套接字缓冲区(内核空间)NIC缓存区
  1。操作系统从磁盘读区数据到内核空间的pagecache
  2。应用程序读取内核空间的数据到用户空间的缓存区
  3。应用程序将数据(用户空间的缓存区)写会内核空间到套接字缓冲区(内核空间)
  4。操作系统将数据从套接字缓冲区(内核空间)复制到能够通过网络发送的NIC缓冲区
  共进行了4次copy操作和2次系统调用,显然很低效。在Linux系统中使用zerocopy(零拷贝)优化,其中之一sendfile,使用后的数据传输过程是这样:磁盘pagecacheNIC缓存区。
  我们的KafkaR通过使用zerocopy优化技术,可以用尽可能低的消费代价让多个consumer消费。数据在使用时只会被复制到pagecache中一次,这样消息能够以接近网络连接的速度上限进行消费。二、数据结构BTree日志解决方案
  日志解决方案即简单读取与追加来操作文件。
  我们的KafkaR采用日志解决方案。
  我们知道BTree是通用的数据结构,其广泛用于随机的数据访问。BTree的操作时间复杂度是O(logN),基本等同于常数时间,但在磁盘上则不成立。
  每个磁盘同时只能执行一次寻址,并行性受到限制。少量的磁盘寻址也有很高的开销。数据翻倍时性能下降不止两倍。
  而日志解决方案的数据存储架构,所有的操作时间复杂度都是O(1),并且读不会阻塞写,读之间也不会相互影响。
  由于性能和数据的大小是完全分离的,则服务器可以使用大量廉价、低转速的1TBSATA硬盘,即使这些硬盘的寻址性能很差,在大规模读写的性能也可以接受,而且三分之一的价格三倍的容量三、获取数据方式pushbasedpullbased
  由consumer从broker那里pull数据呢?还是从broker将数据push到consumer?
  我们的KafkaR采用pullbased方式。
  这是大多数消息系统所共享的传统的方式:即producer把数据push到broker,然后consumer从broker中pull数据。
  pushbased系统优点:
  1。让consumer能够以最大速率消费。
  pushbased系统缺点:
  1。由于broker控制着数据传输速率,所以很难处理不同的consumer。
  2。当消费速率低于生产速率时,consumer往往会不堪重负(本质类似于拒绝服务攻击)。
  3。必须选择立即发送请求或者积累更多的数据,然后在不知道下游的consumer能否立即处理它的情况下发送这些数据。特别系统为低延迟状态下,这样会极度糟糕浪费。
  pullbased系统优点:
  1。可以大批量生产要发送给consumer的数据。
  pullbased系统缺点:
  1。如果broker中没有数据,consumer可能会在一个紧密的循环中结束轮询,实际上会busywaiting直到数据到来。
  为了避免busywaiting,我们的KafkaR的pull参数重加入参数,使得consumer在一个longpull中阻塞等待,知道数据到来(还可以选择等待给定字节长度的数据来确保传输长度)。四、消费者的位置consumedoffset
  KafkaR的消费过程:consumer通过向broker发出一个fetch请求来获取它想要消费的partition。consumer的每个请求在log中指定了对应的offset,并接收从该位置开始的一大块数据。
  consumed指通过状态标示已经被消费的数据。
  大多数消息系统都在broker上保存被消费消息的元数据。当消息被传递给consumer,broker要么立即在本地记录该事件,要么等待consumer的确认后再记录。
  消费者的位置问题其实就是broker和consumer之间被消费数据的一致性问题。如果broker再每条消息被发送到网络的时候,立即将其标记为consumd,那么一旦consumer无法处理该消息(可能由consumer崩溃或者请求超时或者其他原因导致),该消息就会丢失。为了解决消息丢失的问题,许多消息系统增加了确认机制:即当消息被发送出去的时候,消息被标记为sent而不是consumed;然后broker会等待一个来自consumer的特定确认,再将消息标记为consumed。这个策略修复了消息丢失的问题,但也产生了新问题。首先,如果consumer处理了消息但在发送确认之前出错了,那么该消息就会被消费两次。第二个是有关性能的,broker必须为每条消息保存多个状态(首先对其加锁,确保该消息只被发送一次,然后将其永久的标记为consumed,以便将其移除)。还有更棘手的问题,比如如何处理已经发送但一直等不到确认的消息。
  KafkaR使用offse来处理消息丢失问题。topic被分割成一组完全有序的partition,其中每一个partition在任意给定的时间内只能被每个订阅了这个topic的consumer组中的一个consumer消费。意味着partition中每一个consumer的位置仅仅是一个数字,即下一条要消费的消息的offset。这样就可以按非常低的代价实现和消息确认机制等同的效果。consumer还可以回退到之前的offset再次消费之前的数据,这样的操作违背了队列的基本原则,但事实证明对consumer来说是个很重要的特性。如果consumer代码由bug,并且在bug被发现之前有部分数据被消费了,consumer可以在bug修复后通过回退到之前的offset再次消费这些数据。五、leader选举多数投票机制f1ISR
  KafkaR动态维护了一个同步状态的备份的集合(asetofinsyncreplicas),简称ISR。
  在了解ISR之前我们需要先了解insync。
  KafkaR判断节点是否存活有两种方式:
  1。节点必须可以维护和ZooKeeper的连接,ZooKeeper通过心跳机制检查每个节点的连接。
  2。如果节点是个follower,它必须能及时的同步leader的写操作,并且延时不能太久。
  只有满足上面两个条件的节点就处于insync状态。leader会追踪所有insync的节点,如果有节点挂掉了,或是写超时,或是心跳超时,leader就会把它从同步副本列表中移除。
  在ISR集合中节点会和leader保持高度一致,只有这个集合的成员才有资格被选举为leader,一条消息必须被这个集合所有节点读取并追加到日志中了,这条消息才能视为提交。
  ISR集合发生变化会在ZooKeeper持久化,所以这个集合中的任何一个节点都有资格被选为leader。
  多数投票机制f1顾名思义:假设我们有2f1个副本,如果在leader宣布消息提交之前必须有f1个副本收到该消息,并且如果我们从这只少f1个副本之中,有着最完整的日志记录的follower里来选择一个新的leader,那么在故障数小于f的情况下,选举出的leader保证具有所有提交的消息。
  多数投票算法必须处理许多细节,比如精确定义怎样使日志更加完整,确保在leaderdown期间,保证日志一致性或者副本服务器的副本集改变。
  多数投票机制有一个非常好的优点:延迟取决于较快的服务器。也就是说,如果副本数是3,则备份完成的等待时间取决于最快的follwer。
  因此提交时能避免最慢的服务器,这也是多数投票机制的优点。
  同样多数投票的缺点也很明显,多数的节点挂掉后不能选择出leader。而通过冗余来避免故障率,会降低吞吐量,不利于处理海量数据。
  是一种Quorum读写机制(如果选择写入时候需要保证一定数量的副本写入成功,读取时需要保证读取一定数量的副本,读取和写入之间有重叠)。
  KafkaR保证只要有只少一个同步中的节点存活,提交的消息就不会丢失。
  在一次故障生存之后,大多数的quorum需要三个备份节点和一次确认,ISR只需要两个备份节点和一次确认。
  创建副本的单位是topic的partition,正常情况下,每个分区都有一个leader和零或多个follower。总的副本数是包括leader与所有follwer的总和。所有的读写操作都由leader处理,一般partition的数量都比broker的数量多的多,各分区的leader均匀分布在broker中。所有的follower节点都同步leader节点的日志,日志中的消息和偏移量都和leader保持一致。六、Ucleanleader选举ISR副本第一个副本
  如果节点全挂了的服务恢复。
  KafkaR对于数据不会丢失时基于只少一个节点保持同步状态,而一旦分区上的所有备份节点都挂了,就无法保证了。
  KafkaR默认第一个副本策略。
  ISR副本:等待一个ISR的副本重新恢复正常服务,并选择这个副本作为新leader(极大可能拥有全部数据)
  第一个副本:选择第一个重新恢复正常服务的副本(不一定是ISR)作为leader。
  这是可用性和一致性之间的简单妥协,如果只等待ISR的备份节点,只要ISR备份节点都挂了,那么服务都一直会不可用,如果他们的数据损坏了或者丢失了,那就会是长久的宕机。另一方面,如果不是ISR中的节点恢复服务并且我们允许它成为leader,那么它的数据就是可信的来源,即使它不能保证记录了每一个已经提交的消息。
  可以配置属性unclean。leader。election。enable禁用次策略,那么就会使用ISR副本策略即停机时间优于不同步,以修改默认配置。
  通过以上的架构技术的分析和选型,我们就大致设计出了我们的消息队列KafkaR。

魅族再度推出多款新品,网友魅族18s系列值得一试就在近日,魅族召开了以有点东西为主题的秋季新品发布会,本次发布内容有魅族18s、18Pro、18X三款旗舰,同时还包括了Flyme、Lipro、PANDAER等在内的30款新品……运费险平均普降25,商家圈炸锅了据官方消息,从5月24日0点开始,所有商家的运费险费率都要下调了。运费险,每个商家和消费者都不陌生,不论你是天猫还是淘宝商家,不论你在天猫还是淘宝购物,一旦发生退换货,运……燕塘风行香满楼广东的牛奶谁在喝?广东有不少牛奶品牌的老字号。他们陪伴了一代又一代广东人成长以及老去。上回的推文《我在超市找不到光明牛奶了》,好像集中戳中了大家伙的某个点,佳佳在评论区捕获了不少广东……奇瑞大蚂蚁每一款优秀的汽车背后是设计师们的奋力托举奇瑞大蚂蚁,一款非常优秀的SUV新能源汽车产品,这款汽车自上市以来,就受到了很多消费者的认可与支持,销量也是非常不错的。可见,奇瑞大蚂蚁这款新能源汽车产品是一款非常优秀的汽车,……怎么选择一款性价比高的无线网卡国庆佳节虽然已经过完,其中有些人选择外出旅游,有些人选择返乡回家看看父母,其中有些人在回到老家的时候发现没有WIFI,玩不了吃鸡游戏和英雄联盟!这可怎么办?其实只需要一个小小的……多家主流媒体对国家高新技术企业小白智能科技进行了争相报道近日,央视新闻联播、吉林卫视等多个栏目和媒体对小白智能科技的小白人机器人进行了报道!小白人机器人登上国家级别最高、受众最广的央视新闻联播再获肯定,同时也说明小白人受到高度关注,……皮实稳定开不坏,大空间家商两用,盘点市场上适合创业的神车这几年创业这个标签被炒得火热,果然没有不想当将军的士兵。当老板固然从容快乐,可要照料的事维度也更多。好比说实体经济,开店选址是门学问,商品的运输、客户的洽谈与维护等在前期都需要……为什么要做客户背景调查?我们为什么要做客户背景调查呢?大家都知道要对目标客户进行调查,但是到底调查什么、从哪些方面入手、内容有哪些又是通过什么渠道?一、首先谈谈为什么要做客户背景调查分享一……国内基于安卓8。1的OS满满黑科技,不过不是MIUI!如今国内手机UI做的也是越来越好,从最开始的原生安卓系统到现在扁平化的UI界面风格,用户有了自己的自主权,然而一款好的UI也是非常重要的,很多用户在选择购买手机的时候大部分都是……2K画质更清晰看店护家更安心360智能摄像机红色警戒高配版360智能摄像机是较早进入智能家居监控领域的,也是我最早接触到的智能摄像机,小水滴、摄像机云台版、智能门铃这些设备都在使用,期间也接触到许多款智能摄像机,大家在配置功能上没有较……长津湖电影里没有韩军,所以拍的假?事实是,韩军逃跑得太快众所周知,由徐克、林超贤等三位导演以及吴京等多名知名演员参与的电影《长津湖》在国庆档取得了相当优秀的票房成绩。根据相关统计,截止到10月14日,《长津湖》的总票房已经突破46亿……如何打造炫酷的桌面?这款会发光的游戏键盘别错过Hi大家好,我是三重奏在上篇文章中,我单独分享过一款主打光污染的中塔式机箱酷冷至尊MB540,其有着辨识度超高的翼状灯条设计,在搭配上堡垒240水冷之后,整体灯光效果十分……
报告揭露智慧城市技术差距世界经济论坛发现,在G20全球智慧城市联盟的36个先锋城市中,几乎所有城市都存在与智慧城市技术相关的政策差距。接受调查的城市跨越22个国家,包括加拿大的多伦多、印度的班加……小米首款仿生四足机器人惊艳亮相,代码撸狗已成现实原子同学2021年8月10日,小米举办了以《我的梦想,我的选择》为主题的2021年度演讲暨发布会,作为彩蛋公布的仿生四足机器人CyberDog工程探索版,彻底将整场新品发布会引向高潮。……游戏手机这下难受了!卢伟冰搅局给你一个无法拒绝的价格游戏爱好者们来说说,当下游戏手机最大的槽点是什么?我觉得是它根本无法当一台正常手机用,首先市面上游戏手机厚度都在10mm左右,重量接近半斤,这样的砖头机携带很不方便;其次游戏手……秦岭光头山,上次在这看到绝美日出,这次被人赶下山我不知道还有多少人记得我之前写过一篇去光秃山看日出的文章《凌晨4点爬山,看陕西绝美云海日出!还有雾凇景观,犹如仙境》,很幸运的是,这篇文章也得到了青云计划奖励。这让我充分……数据仓库的一些概念数据仓库的一些概念前言由于工作原因,接触到了数据仓库,在平时工作交流的时候可能涉及到一些概念需要补课。因此这里准备补补课。啥是数据仓库数据仓库,英文名称为DataW……千元机又怎么样?3个理由告诉你,千元机也很值得不知道看文章的你是什么想法,现在我身边的朋友都不太会频繁地更换手机。今年来就三个朋友换了新手机,让人意想不到的是他们不约而同的都选择了更便宜的千元机。或许是因为他对手机没……蛋壳租金贷可以2023年再还,微众银行真好人呀最近蛋壳搞得世界很混乱。世界原本单纯,一个房东一个租客,一手交房给住一手交钱给租。加了个蛋壳,蛋壳碎了之后,房东想解约收房得租客先解约,而租客交了钱还没住就没法解约……中信被立案,多家银行被罚,但数据最惊悚的还在现金贷今天下午,传来了中信银行被立案的消息。不过不是公安立的,是银保监。这事因池子而起,但查到最后似乎已经与池子无关了,这事对池子是偶发,对中信银行是常事,因为数据泄露,中信已……我们都误解爱因斯坦了,爱因斯坦直到晚年亦从未信神爱因斯坦曾经旗帜鲜明地表明:所有宗教都是典型的原始迷信圣经场景上帝这个词在我看来只不过是人类弱点的体现和产物,《圣经》中那些可敬的故事也只不过是原始的传说罢了。无论……80岁严氏终生名誉会长修网谱是科技时代的必然趋势严老前辈协助支系采集基础资料为什么现在流行修互联网家谱?湖北咸丰的80岁水利退休职工严峻严老前辈,说出了自己的看法。修网谱是科技时代的必然趋势!我们经过一段时间体验……长安新能源Star国民版多彩款新年伊始油价迎来四连涨,新能源赋予大希望,奔奔EStar国民版多彩款来啦新年开始,受到国际外部环境影响,原油价格一路飙升至95美元,致使国内油价在短短一个月内,连续4次上……AppleWatchSeries7苹果手表7预定时间公布10月4日晚,苹果官方正式公布了AppleWatchSeries7系列的开售时间。AppleWatchSeries7将于10月8日(周五)起接受订购,并将于10月15日(周五)……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网