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

一文解密Kafka,Kafka源码设计与实现原理剖析,真正的通俗易懂

  前言
  Apache Kafka (简称Kafka )最早是由Linkedln开源出来的分布式消息系统,现在是Apache旗下的一个子项目,并且已经成为开册、领域应用最广泛的消息系统之 Kafka社区也非常活跃,从 版本开始, Kafka 的标语已经从"一个高吞吐量、分布式的消息系统"改为"一个分布式的流平台"
  关于Kafka,小编打算从入门开始讲起,一直到它的底层实现逻辑个原理以及源码,建议大家花点耐心,从头开始看,相信会对你有所收获。 关于Kafka
  Kafka是当前大数据解决方案的标配,广泛用于大数据框架间的数据发布和订阅 所以深入理解Kafka 内部机制就非常必要,最近几年Kafka 在国内外发展势头非常不错,已经成为一个既定的事实标准
  下面会为大家讲到Kafka 内部各个部分 特别是存储、发布订阅、协调控制、流处理等 Kafka 入门篇
  作为 个流式数据平台,最重要的是要具备下面 个特点 类似消息系统,提供事件流的发布和订阅,即具备数据注入功能 存储事件流数据的节点具有故障容错的特点,即具备数据存储功能 能够对实时的事件流进行流式地处理和分析,即具备流处理功能 下面我们分析作为 个流式数据平台, Kafka是如何实现并组合上面的 个功能特点的
  消息系统:
  消息系统 也叫作消息队列)主要有两种消息模型:队列和发布订Kafka使用消费组( consumer group )统 上面两种消息模型 Kafka使用队列模型时,它可以将处理 作为平均分配给消费组中的消费者成员
  使用发布订阅模式时,它可以将消息广播给多个消费组 采用多个消费组结合多个消费者,既可以线性扩展消息的处理能力,也允许消息被多个消费组订阅
  队列模式
  多个消费者读取消息队列,每条消息只发送给 个消费者发布-订阅模式( pub/sub 。多个消费者订阅主题,主题的每条记录会发布给所有的消费者
  存储系统:
  任何消息队列要做到"发布消息"和"消费消息"的结合, 实际上都要扮演一个存储系统的角色,负责保存还没有被消费的消息 否则,如果只是在内存中, 旦机器右机或进程重启,内存中的消息就会全部丢失 Kafka也不例外,数据写入至UKafka集群的服务器节点时,还会复制多份来保证出现故障时仍能可用 为了保证消息的可靠性, Kafka还允许生产者的生产请求在收到应答结果之前,阻塞式地等待 条消息,直到它完全地复制到多个节点上,才认为这条消息写入成功
  关于Kafka,小编这里结合书籍和自己的一些看法总结了一批实战文档和源码书籍,大家感兴趣的话可以转发本文+关注+私信【0406】 即可无偿获取Kafka 的基本概念
  下面我们会从 个角度分析Kafka 的几个基本概念,并尝试解决下面 个问题 Kafka 主题与分区内部是如何 存储的 ,它有什么特点? 与传统的消息系统相比 Kafka 的消费模型有什么优点? Kafka如何实现分布式的数据存储与数据读取? 分区模型
  Kafka集群向多个消息代理服务器( broker server )组成,发布至UKafka集群的每条消息都有一个类别,用主题( topic )来表示 通常,不同应用产生不同类型的数据,可以设置不同的主题 个主题般会有多个消息的订阅者,当生产者发布消息到某个主题时,订阅了这个主题的消费者都可以接收到生产者写人的新消息 消费模型
  消息由生产者发布到 fk 集群后,会被消费者消费 消息的消费模型有两种:推送模型( pu和拉取模型( pull 基于推送模型的消息系统,由消息代理记录消费者的消费状态 消息代理在将消息推送到消费者后 标记这条消息为已消费
  但这种方式无法很好地保证消息的处理语义 比如,消息代理把消息发送出去后,当消费进程挂掉或者由于网络原因没有收到这条消息时,就有可能造成消息丢失(因为消息代理已经 这条消息标记为自己消费了,但实际上这条消息并没有被实际处理) 如果要保证消息的处理语义,消息代理发送完消息后,要设置状态为"已发送",只有收到消费者的确认请求后才更新为"已消费",这就需要在消息代理中记录所有消息的消费状态,这种做法也是不可取的 分布式模型
  Kafka每个主题的多个分区日志分布式地存储在Kafka集群上,同时为了故障容错,每个分区都会以副本的方式复制到多个消息代理节点上 其中一个节点会作为主副本( Leader ),其 节点作为备份副本( Follower ,也叫作从副本)
  主副本会负责所有的客户端读写操作,备份副本仅仅从主副本同步数据 当主副本 IH 现在故障时,备份副本中的 副本会被选择为新的主副本 因为每个分区的副本中只有主副本接受读写,所以每个服务端都会作为某些分区的主副本,以及另外一些分区的备份副本这样Kafka集群的所有服务端整体上对客户端是负载均衡的 关于生产者
  消息系统通常由生产者「pro ucer 消费者( co sumer )和消息代理( broke 大部分组成,生产者会将消息写入消息代理,消费者会从消息代理中读取消息 对于消息代理而言,生产者和消费者都属于客户端:生产者和消费者会发送客户端请求给服务端,服务端的处理分别是存储消息和获取消息,最后服务端返回响应结果给客户端 新生产者客户端
  新的生产者应用程序使用 af aP oduce 对象代表 个生产者客户端进程 生产者要发送消息,并不是直接发送给 务端 ,而是先在客户端 消息放入队列 然后 一个 息发送线程从队列中消息,以 盐的方式发送消息给服务端 Kafka的记 集器( Reco dACCUl"lUlato )负责缓存生产者客户端产生的消息,发送线程( Sende )负责读取 集器的批 过网络发送给服务端为了保证客户端 络请求 快速 应, Kafka 用选择器( Selecto 络连接 读写 理,使网络连接( Netwo kCl i.ent )处理客户端 络请求 客户端消息发送线程
  追加消息到记录收集器时按照分区进行分组,并放到batches集合中,每个分区的队列都保存了将发送到这个分区对应节点上的 记录,客户端的发送线程可 只使用 Sende 线程迭 batches的每个分区,获取分区对应的主剧本节点,取出分区对应的 列中的批记录就可以发送消息了
  消息发送线程有两种消息发送方式 按照分区直接发送 按照分区的目标节点发迭 假设有两台服务器, 题有 个分区,那么每台服务器就有 个分区 ,消息发送线程迭代batches的每个分 接往分区的主副本节点发送消息,总共会有 个请求 所示,我 先按照分区的主副本节点进行分组, 属于同 个节点的所有分区放在一起,总共只有两个请求做法可以大大减少网络的开销 客户端网络连接对象eady方法 。从记录收集器获取准备完毕的节点,并连接所有准备好 节点 send 方法 。为每个节点 个客户端请求 将请求暂存 节点对应 通道中; poll 方法 。轮询动作会真正 络请求, 比如发送请求给节点,并读取响应 关于消费者:高级API和低级API
  消息系统由生产者 存储系统和消费者组成 章分析了生产者发送消息给服务端的过程,本章分析消费者从服务端存储系统读取生产者写入消息的过程 首先我 来了解消费者的 些基础知识 使用消费组实现消息队列的两种模式
  作为分布式的消息系统, Kafka支持多个生产者和多个消费者,生产者可以将消息发布到集群中不同节点的不同分区上;「肖费者也可以消费集群中多个节点的多个分区上的消息 写消息时,多个生产者可以 到同 个分区 读消息时,如果多个消费者同时读取 个分区,为了保证将日志文件的不同数据分配给不同的消费者,需要采用加锁 同步等方式,在分区级别的日志文件上做些控制
  相反,如果约定"同 个分区只可被 个消费者处理",就不需要加锁同步了,从而可提升消费者的处理能力 而且这也并不违反消息的处理语义:原先需要多个消费者处理,现在交给一个消费者处理也是可以的 3- 给出了 种最简单的消息系统部署模式,生产者的数据源多种多样,它们都统写人Kafka集群 处理消息时有多个消费者分担任务 ,这些消费者的处理逻辑都相同, 每个消费者处理的分区都不会重复 消费者再平衡操作
  因为分区要被重新分配,分区的所有者都会发生变 ,所以在还没有重新分配分区之前 所有消费者都要停止已有的拉取钱程 同时,分区分配给消费者都会在ZK中记录所有者信息,所以也要先删ZK上的节点数据 只有和分区相关的 所有者 拉取线程都释放了,才可以开始分配分区
  如果说在重新分配分区前没有释放这些信息,再平衡后就可能造成同 个分区被多个消费者所有的情况 比如分区Pl 原先归消费者 所有,如果没有释放拉取钱程和ZK节点,再平衡后分区Pl 被分配给消费者 了,这样消费者 和消费者 就共享了分区Pl ,而这显然不符合 fka 中关于"一个分区只能被分配给 个消费者"的限制条件 执行再平衡操作的步骤如下 关闭数据拉取线程,清空队列和消息流,提交偏移量 释放分区的所有权,删除ZK中分区和消费者的所有者关系 将所有分区重新分配给每个消费者,每个消费者都会分到不 的分区 将分区对应的消费者所有者关系写入ZK 记录分区的所有权信息 关于协调者
  如果是协调者节点发生故障,服务端会有自己的故障容错机制,选出管理消费组所有消费者的新协调者节,点消费者客户端没有权利做这个工作,它能做的只是等待一段时间,查询服务端是否已经选出了新的协调节点如果消费者查到现在已经有管理协调者的协调节点,就会连接这个新协调节,哉由于这个协调节点是服务端新选出来的,所以每个消费者都应该重新连接协调节点 消费者加入消费组
  消费者发送"加入组请求"获取分区定义在抽象客户端协调者的ensu eActi.veG oup () 方法,而该方法又定义在消费者的轮询操作中 即消费者每次轮询都会调用该方法,但并不是每次轮询都要发送加入组请求" 4.1.2节的分析中可知,主要通过「ej oi.nNeeded变量和订阅状态的needs Pa ti.ti.onsAssi.gned变量控制是否需要重新加入组 通常在成功执行一次"加入组"的流程后,会设置这两个变量为false,这样消费者下次轮询时,调用ensureActi.veG oup () 方法就会立即返回 主消费者执行分配任务
  消费者发送的"加入组请求"( Jo1.nGroupRequest )的内容包括 消费组编号、消费者成员编号协议类型、协议内容和元数据( p 「 otocolMetadata 其中,协议内容是分区分配算法的名称,元数据是消费者订阅的主题列表 "加入组响应"对象的内容包括:消费者成员编号 的消费组协议、主消费者编号、协调者执行分区分配工作的次数、消费者成员列表 加入组的准备、完成和监昕器
  消费者重新加入消费组,在分配到分区的前后,都会对消费者的拉取工作产生影响 消费者发送"加入组请求"之前要停止拉取消息,在收到"加入组响应"中的分区之后要重新开始拉取消息时,为了能够让客户端应用程序感知消费者管理的分区发生变化,在加入组前后,客户端还可以设置自定义的"消费者再平衡监听器",以便对分区的变化做出合适的处理
  由于时间关系,只给大家简单的介绍了Kafka新版本的一些高级特性,并没有深入分析相关的代码实现细节,这些东西我也都有整理,大家感兴趣的话可以 转发本文+关注+私信【0406】 即可无偿获取我整理的Kafka实战文档和源码书籍

余额宝发体验金最高一百万,快来晒晒你有多少1月14日余额宝上线了一个名为年年有余的活动,在活动中你可以化身锦鲤跃龙门,有机会抢到体验金蚂蚁森林保护罩蚂蚁庄园鸡饲料。支付宝官微也发了一条微博助力,表示快到年底了,给大家博个好光伏发电对人体有害吗?光伏发电对人体有害吗?首先我们要知道光伏发电的原理是什么,光伏发电是利用半导体界面的光生伏特效应而将光能直接转变为电能的一种技术。这种技术的关键元件是太阳能电池,太阳能光伏发电的最橙色预警来袭!OPPORenoZ珊瑚橙高清图赏,撩到你了吗?OPPORenoZ外观和之前的Reno比较接近,不同的地方在于RenoZ采用一块6。4英寸水滴屏,取消侧旋升降式摄像头,屏占比达到92,支持屏幕指纹。新机搭载联发科P90处理器,内颜值爆表!OPPOReno10倍变焦版惊艳开售,是你的菜吗?OPPOReno10倍变焦版薄雾粉来啦!这个配色大家翘首以盼了很久,终于在618当天开售,这也是个人眼中颜值最高的一个配色,作为一个钢铁直男,竟然毫无抵抗力。鲨鱼鳍升降摄像头10倍1499元的预算,谈谈买魅族16Xs到底值不值?5月31日,魅族16XS发布,6月6日降价200元!也许是为了618冲量,也许是竞品所迫,也有可能是故意发布高价然后是后期降价吸引眼球,毕竟降价时还没发售!但这些都不重要,对于消费四核路由为何如此火爆?用了华为路由WS5200我才找到答案网络时代,路由器可以说是家中必不可少的上网设备,市场上参差不齐的路由器,到底该怎么选?最近四核路由非常火,那到底和普通路由有什么区别呢?路由器有没有必要上四核呢?前段时间上手了华为5G驾到!夏普提前3年未雨绸缪,只为今朝最近和朋友聊的最多的话题就是5G,大家了解的最浅显的知识点就是5G速度更快了,除此之外一无所知。老实说,5G会衍生多少新生事物,现在没有人知道。但跟随通信技术的发展,电视的分辨率也谁是千元最强拍照?四款热门机型对比,差距真的很大谁是千元最强拍照?四款热门机型对比,差距真的很大一直以来,手机的拍照都是消费者非常关注的一个功能,而面对镜头传感器的不断升级,如今的千元机也跟上了后置双摄三摄的脚步,这次我们请来了相机表现大放异彩!华为nova5系列的拍照到底有多强?不仅是华为的P30系列,就连主打年轻潮流用户的nova系列也开始放大招,卯足了劲儿去提升相机功能。6月21日,华为nova5系列在武汉正式发布,其中最令人印象深刻的还是当属机身后置欢聚云端让爱发光,广东欢太交出新颖营销答卷高速发展的信息时代,人早已被淹没在信息洪流中,他们的时间碎片化兴趣泛泛化。面对日益同质化的营销竞争,一个品牌如何才能走进用户内心深处?在营销竞争最为激烈的春节档期,各路大招如何产生全新改造的iPhone11Pro,对比才知道何为用心的设计作为定制款手机,许多人第一印象都是高档霸气的风格,奢华之余,下意识会觉得这是成功男性才会享用的特权。但实际上并非如此,美女能顶半边天向来不是一句空话,马云爸爸更是背靠着广大妇女一举
上海车展5G备受关注,高通携手众多车厂,共同打造智能汽车这几天,上海国际车展赚足了眼球,成为中国汽车爱好者的关注热点。本届车展有一个很明显的趋势,很多迹象已经表明,整体汽车工业的变化拐点已经到来,下一阶段是5GAI等科技深度绑定汽车工业圈粉国内外用户,FindX3系列靠的是这些独特气质2021年第一季度已经过去,这一时期全球智能手机市场又悄然发生了变化。从StrategyAnalytics的最新研究数据来看,该时期全球智能手机出货量为3。4亿部,其中OPPO稳居以后将无工可打?这个国产品牌的智能工厂厉害了一个小黑屋里,没有一个人,却能源源不断的生产出高端产品,这里就是小米的黑灯智能工厂。作为小米最顶尖蕴含科技力量最多的地方,小米智能黑灯工厂设计年产能可以达到百万级,不仅仅可以作为高三翼鸟全民开麦唱,智慧全场景圈粉成主角把家庭变成K歌房,拿起话筒想唱就唱,是很多唱歌爱好者的梦想。而现在,三翼鸟体验店让用户的这个梦想变成了现实。5月10日17日期间,在青岛市辽阳西路富尔玛的三翼鸟体验店,三翼鸟全民开追剧或娱乐,高品价比华为智慧屏SE系列统统满足每逢周末假期,有的小伙伴特别喜欢出门逛街旅游之类。而也有许多小伙伴,趁着好不容易的休息时间,放空自己,宅家回血。不过,宅在家里也只是一觉睡到自然醒,特别容易无聊,而且还会觉得更累。父母不会用智能机?只需一招,教你简化智能机有一种孝顺,是带父母跟上这个信息时代父母年纪大了买个智能手机让他们也感受一下网络世界上网看看花花世界可是他们却不会用?眼睛花了,看不清手机上的字了?跟着小V,一招教你简化智能机让父新能源综合知识(第三季)美天优理赔汽车保险理赔公众号1接触式电池特点是简单效率高,但是充电电流较小,其通常充电时间是(C)A13hB35hC58hD811h2耶律勇在公路上看到一辆纯电动汽车,因为他看到车灯具设计千奇百怪的创意灯分享灯的出现让人类征服了黑夜,到现在它已经变成了人类生活中不可或缺的一部分。在现如今在这个追求新颖创新的时代里,灯具已经不仅仅只是用作照明,它同样可以设计的很不一样。一Othello这外卖骑手送餐途中出交通意外,算工伤吗?国家相关文件出台了假如有这么一份工作你每天的工作时间从上午12点到晚上12点,早上还要参加公司晨会,工作要统一穿工作服,遵守公司各项规章制度,工作内容为这家公司承包的外卖业务送货,每月工资20日固定在水杯里看鱼儿飞上天,寻觅自由勇敢的灵魂边界为何不可以打破?是谁说天性不可以挣脱?开花不结果又有什么?是鱼就一定要游泳?中国传统文化里,鱼一直都是带来好运和招财进宝的象征,而飞鱼,为传统锦鲤形象赋予新的生命力。艾优旗下品中国飞天式浪漫,香薰竟然上太空了从风云海洋北斗天问悟空墨子,再到天宫嫦娥玉兔鹊桥神舟天舟,浪漫的中华民族神话故事传递者华夏儿女的共同夙愿上天!一般人是没法实现了,除非是宇航员或马斯克,但最近一个硬核科技企业做到了