什么是 cafka? 它是用于解决什么问题的? cafka 是由 linkedin 开发的一种高性能、分布式、可扩展的消息对列系统。它是一个开源项目,目前由 apache 软件基金会维护。 cafka 的设计目标是为了解决大规模实时数据流处理和消息传递的问题。 主要特点包括,一、高吞吐量, kafka 能够处理非常高的消息吞吐量,每秒数百万条消息。二、持久性 kafka 将消息持久化存储在磁盘上,因此数据不会丢失。三、分布式, kafka 是一个分布式系统,可以通过横向扩展来增加容量和吞吐量。 四、多副本复制 cafka 支持多副本复制,确保数据的高可用性和容错性。五、实时流处理 cafka 的设计使其非常适合实时数据流处理场景,如日志收集、 事件处理、指标监控等。 kafka 主要用于以下情况,一、日志收集与聚合 kafka 可以作为中心化的日志收集和聚合平台,收集来自各个应用程序的日志,并将其发送到中央存储 和处理系统。二、消息对列 kafka 可以用作消息对列,用于一部通信骄傲生产者和消费者,以及处理大量消息。三、事件流处理 kafka 可以用于处理事件流数据,例如实时监控、实时分析和实时决策。 四、流式处理 kafka 可以与流处理框架,如 apache frank、 apache spark 结合使用,支持实时流处理应用程序。 总的来说, cafk 是一个功能强大的消息传递系统,可用于构建实时数据管道,处理大规模的事件流和日制数据,并支持高可用性和可扩展性,他在处理大规模数据和构建实时数据处理系统方面发挥着重要作用。
粉丝1440获赞6028
哈喽,大家好,我是于哥,欢迎来到视频视频,那今天呢,我们这个视频讲一下卡不卡为什么快啊?首先我们来了解一下,就是卡不卡他其实是一种分布式的基于发布和订阅的这种消息组件,对吧? 然后这个地方我给大家准备了一个图,就是我们在日常的工作过程当中,或者说系统架构设计过程当中,卡不卡他所处的一个位置,其实就是收集上游的一些数据,然后再把这个数据啊流转给下游,对吧?大概是这样的一个角色。 那么这个地方我们要了解到的是前面我们讲到的卡不卡的快,他究竟是指的什么快啊?到底是卡不卡他的这个低延迟啊,还是卡不卡的这个吞吐量啊,造成他可以在单位时间内处理很多的数据,所以我们觉得他非常的快。 那么通常我们在讲到像卡不卡这一类的消息呃中间键的时候呢,我们会给他做一个这样的比喻啊,就是一个排水管 道,然后里面会走很多的水,那么如果你想要让这个排水的效率更高的话呢,你肯定是需要在单位时间内通过更多的水,那有一个方法就是提高这个排水管道的管径,那其实卡不卡它的内部是有很多非常优秀的设计的啊,今天我们主要是关注呃 两个点,第一个是顺序 i o, 第二个是零拷贝。那么首先呢,我们来看一下这个顺序 i o 这个方面, 这个地方我们是知道卡夫卡他的一个存储戒指其实是这个,呃,硬盘,就传统的那种硬盘,机械硬盘,对吧? 早起的时候,那这个时候呢,我想问大家一个问题,就是在你的脑海当中,呃,咱们的这个硬盘,他跟呃内存相比,哪个速度更快啊?三二一哈,毫无疑问肯定是这个 ram, 对吧?因为我们这个硬盘他是有一个物理的这个磁头的移动 啊,不管是读写 ok, 但是呢,我们的这个 ram 他是基于这个电信号的,所以说他们两个的读写效率肯定不在一个量级。那这个地方呢,我们还需要去了解一个概念,就是在磁盘读写的过程当中,有两种读写的模式啊,一个是顺序读写,一个是随机读写。 那么大家可以看到随机读写的时候呢,因为他的这个词头需要来回的在不同的这个卷啊,或者说戒指上面去移动啊,他的这个过程是需要去花费时间的,如果说顺序读写的话呢,他直接就到了下一个地方,他的这个距离是会缩短的,这样的时间也会剪短啊,所以说 我们来看到的一个结果就是顺序图写肯定是要优于随机图写的啊。然后我们在卡夫卡内部他的一个数据结构的设计是有一个叫 append only log 的这样一个概念啊,也就是前面我们讲到了他利用 磁盘的这个顺序读写的啊,一个机械的素质啊,来优化了他的一个内部的数据结构啊,就是我们最后过来的这个 datasos, 他啊在写数据的时候是写到这个 相应的这个数据的后面就是 append only, 那么我在网上还找到了一个呃, s s d 或者是 s d d 的这个 benchmark 的这个图片啊,大家可以看到顺序读写和 呃,这个随机读写,他的一个数量层级,是啊,不在一个级别的,对吧?就是快了好几个数量级,我们可以看到他的这个顺序读写可以达到几百兆每秒的这样一个速度。 然后就是硬盘,他其实发展到今天来看的话呢,他的这个本身的这个机械素质也是有了很大的提升。你像我们原始的那种 sdd 啊,机械硬盘,包括现在的这个颗粒的 ssd 啊,固态硬盘,对吧?他们两个在存储容量和 和购买价格上面肯定是不一样的,对吧?传统的这种机械硬盘,他可能是啊,比如说一百块钱,那同样容量的,可能这个 ssd 需要卖到三百或者是四百啊,也就是说差了个 三倍的价格,那同样的价格的话呢,这个 s、 d、 d 它能得到的一个容量是相对来讲要大个好几倍的三倍或者是四倍这个样子。 那么所以说呢,我们使用了卡不卡之后,基于这个顺序读写,然后我们可以去采用那种,呃,比较古老的这种机械硬盘啊, 来完成一个非常高效率的消息的传递啊,这个在企业内部是非常降本增效的,呃,一个手段,对吧?你可以看到老板现在是有多么的开心。 ok, 那么我们使用了这个顺序读写,包括使用了这个廉价的啊,拥有大容量的这种存储戒指 以后呢,确实是能够达到一个性能的提升啊,包括我们传递的这些消息,也可以去做一个长期的留存持久化。那么所以说呢,呃,这个呃设计是非常不错的啊, 是在卡不卡之前的一些消息组件当中啊,是很少有这样的一个设计的。 ok, 所以说我这个地方也是写了一个前少古人,而不是前五古人,因为我没有去考究其他的一些啊,技术全新,他们有没有这样的一些东西。 ok, 那接下来呢,我们来看一下另外一个层面吧,就是零拷贝, ok, 领拷贝这个东西我觉得肯定很多同学已经听过了啊,就是我们去参加面试的时候,如果说聊到卡不卡这个话题,肯定需要去了解到这个领拷贝的,对吧?啊,那这个地方呢,就是还是有一个卡不卡的这个架构图吧,就是说他做一个消息管道,他在系统当中的一个 角色和定位。 ok, 然后呢,我们这个地方卡不卡其实是需要去将网络当中的数据然后写到这个机械的硬盘里面去,对吧?那么在这个过程当中呢,如果你不使用零拷贝的话,你使用的是传统的那种,哈哈,就是老一点的那个系统, 他的这个复制方式其实是分这样几步的。 ok, 就是把大象放进冰箱,总共分几步啊?我们来拆解一下。 ok, 首先第一点呢就是你需要去呃这个数据从磁盘加载到操作系统的缓存, ok, 操作系统缓存,然后呢,你还要从操作系统的缓存把这个数据复制到卡不卡的内部卡不卡呢,他需要去把这个数据复制到啊,套接字的这个缓冲区啊,要开始网络的传输了。 ok, 然后套接字缓冲区呢,最后会把这些数据复制到网卡 卡的缓冲区啊,接下来呢就是通过网络把这些数据发送给下游的消费者。当我们使用了零拷贝之后呢,其实他的这个第一步是一样的,都是需要从这个磁盘加载数据,然后到操作系统的这个缓存系统给他缓存, ok, 然后呢我们的这个卡夫卡它内部会有一个 send file 的方法,或者叫函数啊,会把这些数据啊直接给到网卡的缓冲区啊,就没有像刚才传统复制的这些中间流程,中间啊复制拷贝流程,对吧? 那最后呢,这些数据就会通过网络发送给小飞车。而对于现代网卡来讲的话呢,这种直接复制零拷贝的过程其实是通过 dma 来实现的啊,这个 dma 其实就是呃直接内存访问的一个缩写,因为这种直接内存拷贝的方式呢,它是不需要去和呃 cpu 来进行沟通的,所以 说他的这个效率会更高一些。那么整体来看的话呢,我们可以看到这个顺序 i o 和零拷贝是卡不卡之所以称之为快的一个秘诀,对吧? 啊,也就是他整体这个框架比较高性能的一个基石。那当然卡夫卡在不断的迭代和优化的过程当中呢,也啊相继的去使用一些其他的技术来充分的利用现代的这些机械硬件的性能, 榨干他们的生存价值,对吧?啊,这些内容后面有机会我们再一起来聊一下, ok, 那以上呢就是本期视频的一个全部内容了,如果你觉得这个视频做的还不错的话呢,请帮忙点赞投币分享一件三连,支持我一下没有关注的小伙伴呢,也可以点下关注啊。 ok, 我们下个视频再见吧。
apm 是什么?百度上面可能会说 apm 是什么预先定义的函数啊?或者说什么软件系统不同组成的衔接约定啊?其实这里面有点深色难懂,我给你举一个例子啊,就比如说平时我们在网上买东西,对吧?商家会给我们发货 啊?这个时候你能够在这个淘宝上,对吧?看到这个物流的一个进展信息,对吧?因为这是淘宝公司跟快递公司,他们作为两家公司合作的一个产物,对吧?那我们想在淘宝上看到快递的一个信息, 这边就需要是个 ap i 了,对吧?你想查快递的时候呢?淘宝可能说给快递公司那个网站去传递一些参数,然后比如传一个 id, 又传你的姓名,然后就能够拉到你这个订单下面的一个物流状态,对吧?这也是我们常说的 app。 那再个例子,就比如说我开发了一款软件,对吧?叫,哎,好了,那我的朋 朋友开发一个人叫 b, 那我朋友想调用我这款软件的部分功能来用,对吧?但是其实我又不可能把原码给他,但是他也不必要去看我的原码,对吧?所以这个时候我只需要去暴露一个接口,对吧?俗称 atm, 那么他就可以给我来传参数,来彼此调用我这里边的功能,好不好?
请谈一谈卡副卡的工作流程,这是一个卡副卡常见的面试问题,那我们看一张图, 卡富卡作为消息队列也有三个要素,分别是左侧的生产者,右侧的消费者,以及中间的消息服务器不落。可那我们中间这个呢,是一个卡富卡的集群,那么这里边又有四个概念,分别是托皮壳、爬低性、 offshi 的和副本。 那首先我们看一下脱皮哥,脱皮哥呢,他是一个存储消息的抽象的逻辑的概念,不是真实存在的,可以认为这个里边就是存放消息的一个集合,可以作为消息的分类, 比如说不同的消息也可以用不同的脱皮稿来存放。好,那么爬低性这个概念呢?它是脱皮稿之下的一个概念, 在一个托闭口下边可以有一个或者是多个爬低行,爬低行也叫分区,那么这个概念很重要,爬低行是真正的存放消息的消息队列。哎,我们消息呢,就是存放在爬低行里面的,我们看一张图, 那我们左侧这个是生产者,右侧这是消费者,那么中间这个呢,就是我们的一个托闭口,托闭口的名字我们叫埋托闭口,那么这个托闭口下边就有三个 pad 型,三个分区,我们简称叫 p n、 p 一和 p 二。好,这就是我们的 pad 型。 那接下来第三个概念就是我们的欧赛的,欧赛的就是每个 party 型里边的消息有一定的顺序性,我们这里有一个序号,就代表我们消息的顺序,那么这个就是我们消息的欧赛的。好,那么最后一个概念就是副本,副本呢就是 每个 party 型的备份,一个 party 型可以有一个或者多个副本,也就是他可以有一个或者是多个备份,那么这个副本呢?他有主副本和重副本啊,主副本我们叫 lid, 从副本叫 follow, 主副本负责读写,从副本只负责从主副本同步数据。好,那这四个概念我们解释完以后,我们下面可以看一下我们这个图,我们生产者发上一个消息,他会按照一定的策略把消息来发送到脱皮壳下的某个爬地形下, 那么他肯定是发送到这个主的爬地形啊,立德的爬地形,因为虫的爬地形他是只负责同步组的数据,他是不接收读写的。然后我们消费者这边呢,他也是按照一定的策略从这个立德的 这个爬低性这个分区中来获取消息。一个爬跌性下的消息他是有顺序的,这个爬低性下他的消息有顺序,这个爬低性下他的消息也有顺序。但是如果我们跨分区的跨爬跌性的消息,他就是没有顺序的。 如果我们要想实现一个顺序消息,那这个时候把消息发送到同一个 party 形象,那么这个时候他的消息是有顺序的。我们这个立的 party 型,那么他对于有一个重的副本 follow party 型, 我们这个 lid 的爬地形,它也对于有一个虫的啊 follow 的爬地形。那么以上这个呢,就是卡副卡的工作流程。
为什么你们项目中消息队列要用 rap m q? 我们调研对比了市面上常用的几种消息队列,比如 cough cup、 rabbit m q、 rocket m q, 其中 kfak 吞吐量高,十瓦级别,延迟在 miss 级别,经过参数优化配置,可以做到数据不丢失, 用作大数据计算和日志采集比较合适。 rocket mq 吞吐量也不错,官方号称也是十万级别,并且功能比克发克更完善,它还是 java 语言开发的,对于使用 java 技术站的我们也方便拓展。至于 rabbit mq, 它的吞吐量在亿瓦级别, 但是这个吞吐量在我司已经够用了,虽然他不是渣外语言开发的,但是对于我们来说基本没有拓展 mq 的场景,他的消息基本也不会丢。更重要的是,公司内部有许多 以前在 x x x 工作过的同事, x x x 以前就是大量使用的 rabbit mq, 对于大家来说使用起来比较熟悉,上手快。综上所述,我们选择了 rabbit mq 作为消息对列,记得关注再走哦!
呃,我们通常所说的 api 是什么?那我在这边呢,打一个比分,有一杯蜜蜂的饮料,饮料上面呢插着吸管, 如果你想喝到这杯饮料,那么你就必须通过这根吸管来实现,那么吸管的名称呢,就叫做 api, 而你就可以叫做什么某某系统, 这下你清楚了吗?用程序员的话来看呢,研发人员 a 开发了软件 a, 研发人员 b 呢,正在开发软件 b, 那么有一天呢,研发人员必须想调用软件 a 的某些功能来使用,但是他又不想从头看一遍软件 a 的圆码和功能的实现过程。那怎么办 呢?研发人员 a 呢,想到一个好主意,我把软件 a 里你需要的功能打包好,写成一个模块,你按照我所说的流程,把这个模块对应的接口放在软件 b 里去调用, 那么你就能够直接使用我的功能了。那么其中呢,研发人员 a 所说的那个接口就叫做 api。
哈喽,大家好,我是麦克,一个工作了五年的粉丝啊,在简历上写精通卡夫卡,结果在面试的时候啊,直接被打脸,为什么问他什么是 isr, 为什么设计 isr? 结果他一脸懵逼的看着面试官。关于这个问题的回答呢,我整理成了文档啊,有需要的小伙伴可以在我的主页去加微领取。 下面我们看看普通人和高手对这个问题的回答。普通的回答,嗯,呃, isrisr 好像是卡不卡里面的一个机制吧,嗯?为什么要引入? 嗯,应该是跟我记得好像是跟数据同步有关系。嗯,高速的回答,好的,关于这个问题呢,我需要从几个方面来回答,首先,发送的卡弗卡 brock 上面的一些消息啊,最终是以 party 型的一个 物理形态来存储到瓷板上面的,而卡不卡呢,为了去保证 party 选的一个可靠性,提供的 party 型的一个副本机制。然后在这些 party 选副本级里面呢,存在一些 lee 的 party 选和佛罗 party 选, 而生产者发送消息过来的时候呢,会先把消息存在 le 的 party 选里面,然后再把消息复制到 folo practice 里面。那么这样设计的好处是,一旦 lid party 型锁在了节点挂了,那么我们可以重新从剩下的 party 选副本里面去选举出新的 leader。 然后呢,消费者呢,可以继续从新的离的 p t 恤里面去获取没有被消费过的数据。而在 p t 恤的多副本设计方案里面,有两个非常关键的需求,第一个是副本数据的一个同步, 第二个是新的哩的的一个选举,而这两个需求都需要涉及到网络通信,所以卡佛卡为了避免网络通信延迟带来一个性能问题啊,以及尽可能的去保证 新选举出来的 lead petition 里面的数据是最新的,所以设计了一个 is r 这样的一个方案。那么 is r 全称叫 in single replica, 它是一个集合列表,里面保存的是和 lead petition 节点的数据最接近的所有的 follow petition 节点, 如果某一个 folo 的朋友圈里面的数据啊落后立的太多,那么这个节点就会被踢出 isr 的一个列表。简单来说呢, isa 列表里面的节点啊,同步的数据一定是最新的,所以后续新的立的选举呢,我们只需要从 isr 列表里面去筛选就好了。 所以我认为啊,引路 isr 这样一个设计方案的原因有两个,第一个是尽可能的去保证数据同步的一个效率,因为同步效率不高的节点都会被踢出 isr 的一个列表。第二个是避免数据丢失,因为 isr 里面的节点的数据和 v 的副本是最接近的。以上就是我对这个问题的一个理解,在我看来,这个问题 是非常有研究价值的。一般来说,副本数据同步无非就是同步主色或者异步非主色两种方案,但是这两种方案要么带来性能问题,要么带来数据丢失的问题,都不是特别的合适啊。而 sr 这种设计呢,就非常完美的解决这两个问题, 在实际应用中呢,我们可以借鉴类似的设计思路。好的,本期的普通人 vs 高手的面试系列视频呢,就要到结束了,喜欢我的作品的小伙伴记得点赞、收藏加关注。我是麦克,一个工作了十四年的家务程序员,我们下期再见。
什么是 ap i? ap i 是前端调用后端数据的一个通道,就是我们所说的接口,通过这个通道可以访问到后端数据,但是又无需调用免代码,可以帮助工程师快速便捷访问并获取资源,大大提升项目的开发效率。什么是 sd k? sdk 是软件开发的工具包,广义上的是指辅助开发某一类软件的相关文档、案例和工具的集合。使用 sdk 可以提高开发效率,更简单的接入某个功能,比如说一个产品想实现某个功能,可以找到相关的 sdk, 工程师直接接入 sdk 就不用重新开发了。例如美颜 sdk、 人脸识别 sdk 的 apr 与 sdk 的区别。 从本质上说, api 就是数据接口定一种能力,一种接口的规范,而 sdk 相当于开发集成工具环境。更准确的说, sdk 通常包含一个或者多个 api, 程序员会在 sdk 环境下调用 api 数据,但是 sdk 又不完完全全只是包含 api 以及 api 的实现。他是一个软件工具包,还有很多其他辅助性的。想了解更多开发小知识关注我们。
你这个项目里面既用的卡不卡,又用的 rocksomeq, 他们是分别用在什么样的场景中?在你的这个项目里面,柔配的 mc 数就是做服,主要是柔和 ncop, mc 数主要是做服务间,服务间的小写合法,比如 协议支付。嗯,完成之后他可能会要通知呃消息系统或者商户系统。通知消息系,呃消息系统可能就是说 把他的账户系统要做他的处理,嗯嗯,呃,通知账户系统可能就是针对于这笔定,大家记录他的相关信息。嗯,然后卡不卡的话 就是说基本上就在那个错误质量里吧,就看我把这个消息,把这个信息日志也收集起来,然后后面方便后面这这些问题的查看。哦,我明白,其实你说肯定 q 就是做业务, q 嘛,就是针对你业务的流程流转来做一步的通信嘛,对吧?是,对,嗯,比如说业务就是做日本。