对Kafka的总结

定位:kafka是一款分布式,高吞吐量,基于发布/订阅的消息中间件。

核心组件:

broker:kafka服务器,负责消息的存储和转发。

topic:主题,消息的类别,kafka按照topic分类消息。

partition:分区,一个topic可以有多个partition分区,topic中的消息保存在各个partition上。

offset:偏移量。消息在kafka消息文件中的位置,可以理解为消息在partition上的偏移量,也是代表该消息的唯一序号。

producer:消息的生产者。

consumer:消息的消费者。

consumer group: 消费组,消费者的分组,每个消费者分组必须要属于一个group

zookeeper:配置中心,保存kafka集群的broker,topic,partition等信息,另外还负责broker的故障发现,partition的leader选举,负载均衡等。

 

  Kafka的存储设计:

partition分区数据文件(offset,messageSize,data)

partition中的每条message包含3个属性,offset表示这个消息在partition中的偏移量,可以看作每个消息的消息顺序id。messageSIze则是消息的大小,data为消息的内容。

数据文件分段segement(顺序读写,分段命令,二分查找)

partition物理上是由多个segement文件组成,每个segement文件大小相同,顺序读写。而且每个segement文件都是以当前文件中offset最小的值命名.log,这样我们查offset消息时,就可以很快二分查找定位到这个offset消息在哪个segement文件中。

数据文件索引(分段索引、稀疏存储)

kafka为每个segement文件建立了索引文件,文件名与segement文件名相同.index。但是kafka并没有给每一条消息都建立索引,而是采取稀疏索引的方式,每隔一定字节的数据建立索引,从而避免索引文件过大,因此可以将索引文件放入内存中。

 生产者设计(负载均衡)

由于topic是由多个partition组成,且partition均匀分布在不同的broker上,因此为了有效的利用broker的集群性能,提高吞吐量,producer会通过hash或者随机等方式将消息平均发送到多个partittion上,以实现负载均衡。

批量发送

批量发送也是提高吞吐量的重要方式,Producer端可以在内存中合并多条消息,以一次请求的方式批量发送给不同的Broker,从而大大减少broker存储消息时的io操作,所以也一定程度上影响消息的实时性,但是换取了更好的吞吐量。

消息压缩

producer端可以用GZIP或者Snappy对消息集合压缩。producer端压缩后,consumer也需要解压,压缩解压需要消耗少量cpu资源,但是好处是减少传输的数据量,减轻网络压力,在大数据处理上,往往瓶颈体现在网络上而不是cpu。

消费者设计

consumer group 

同一 Consumer Group 中的多个 Consumer 实例,不同时消费同一个 partition,等效于队列模 式。partition内消息是有序的,Consumer通过pull方式消费消息。Kafka不删除已消费的消息 
对于partition,顺序读写磁盘数据,以时间复杂度O(1)方式提供消息持久化能力。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转]Nginx的负载均衡方式

如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。具体配置过程如下: 1. 在http节点下,添加upstream节点。 upstr…

Ribbon中的负载均衡算法实现

Ribbon响应时间权重负载均衡算法,假设有3台服务器A,B,C响应时间为10,40,80ms。 算法公式:weighsofar 总响应时长- 本服务器平均响应时长 A:0130-10120 B:120130-40210 C:210130-80260 将3个轮询数值放…

maven私服配置

环境: eclipse 、maven、nexus。 1、配置setting.xml文件 1.1、配置本地仓库位置:文件中,存在节点 “localRepository”,默认是注释,也就是本地仓库使用默认地址“Default: ~/.m2/repository”,一般为系统…

算法练习一:求最小公倍数

求最小公倍数, 两个数的乘积2个数的最大公约数*最小公倍数 最大公约数的求法:辗转相除法。 2个数a和b,最大公约数等于a/b的余数r和b的最大公约数, 如果r余数为0则b为最大公约数 private static int gcd(int a ,int b){if(b 0)…

生活感悟(一)

生活中会有很多不顺心; 如果你的生活比较顺利,请珍惜,并不是每个人都会那么幸运; 感觉自己总是后知后觉; 但是人生只有一次是吧; 在人生的十字路口,努力做好一切; 可是生活总不那么近…

NAT模式下虚拟机与主机网络关系配置

哎,又是烦人的网络关系耽误了好长时间。 当前情况是使用NAT模式使得主机与虚拟机与外网连通 具体配置如下: 这是VM上配置 如下是虚拟机ip配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 vi /etc/resolv.conf service network restart

Notes of fwt

昨天考试由于不会fwt而爆炸,所以今天搞了一下fwt……话说这玩意的普及程度已经很高了.fwt,快速沃尔什变换,可以用于位运算卷积的优化,是一种线性变换,所以就会有许多好的性质(eg:可以直接模,可以修改运算等). & | ^ 的变换定义与方法是基础,在此基础上的扩展与运用是重要的…

开发中遇到的bug记录

1.启动类启动提示Mapper无法注入 启动来上注解 MapperScan(basePackages "com.xxx.xxx") 注意包路径 2.启动类启动提示datasource 的url等无法识别注入 datasource配置文件配置的druid数据源,注意Pom文件配置druid的pom坐标 3.datasource的bean注入…

python学习笔记-day6-函数的延续【汉字转拼音模块,函数返回多个值,匿名函数,列表生成式,generator生成器,三元运算符】...

继续来说函数的后续知识点,主要是函数返回多个值,匿名函数,三元运算符,算是比较小的知识点。 一、汉字转拼音模的使用 1、安装模块 #install xpinyin 2、如果使用 结果: 二、函数返回多个值 1、python的函数可以同时返…

EasyExcel项目使用

2.0.5版本做了很大改变&#xff0c;记录2.1.6的所使用的工具类及方法 其实持续对easyexcel的git进行关注是最方便的&#xff0c;上面也有完整的demo以及工具类等等 1.easyExcel的pom坐标 <!-- easyexcel --><dependency><groupId>com.alibaba</groupId&g…

c# vs2010 excel 上传oracle数据

excel 数据表上传到oracle数据库。过程例如以下&#xff1a; 1、打开本地excel文件 2、用OleDb连接excel文件 3、将来excel的数据读取到dataset中 4、把dataset 中数据insert到oracle中对应的表中 以下截图说明&#xff1a; 建立项目文件。非常easy。就是建立普通的winform项目…

SpringBoot编写sh脚本进行启停

SpringBoot项目可以使用内嵌tomcat的jar包启动方式也可以选择war包配置等等进行外置tomcat部署启动 我这里记录一下内嵌tomcat的jar包启动方式及shell脚本 maven clean package 打jar包 本地Java -jar xxx.jar启动测试&#xff0c;如果提示没有主方法入口等问题&#xff0…

Nacos配置文件覆盖问题

近期新项目上cloud alibaba架构 用的注册和配置中心就是用的nacos Nacos作为配置中心给我的感觉也是不是很好用&#xff0c;大概配置中心都不是很好用吧&#xff0c;可能用多了会好点 首先说一下遇到的问题&#xff0c; nacos有几个范围性的概念 我就不说了 1.首先是命名空…

leetCode题解之Reshape the Matrix

1、题目描述 2、分析 使用了一个队列。 3、代码 1 vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {2 3 if( nums.size() * nums[0].size() ! r * c )4 return nums;5 vecto…

项目搭建Nacos及遇到问题解决

新项目决定用SpringCloud Alibaba组件作为基础架构搭建微服务架构 Nacos作为服务注册与发现中心&#xff0c;和eurake有些区别&#xff0c;首先是CAP原则&#xff0c;eurake属于高可用AP&#xff0c;nacos属于一致性CP。 其次eurake的使用是在代码中创建项目并整合入其中&…

Maven3版本的超级POM位置及中央仓库位置

背景 之所以想到这个问题&#xff0c;是因为在配置Nexus-Maven 私服的时候&#xff0c;需要在Maven的settings.xml中对<mirror>进行配置&#xff0c;在配置中央仓库的镜像时&#xff0c;<mirrorOf>需要设置成central&#xff0c;因为这是maven中央仓库的id&#xf…

使用Nacos项目jar包启动抛出的yml异常

记录一下项目jar包启动时一直抛出nacos yml编译错误的问题 一开始抛出yml的问题&#xff0c;是编码问题&#xff0c;但是又不知道Nacos里怎么配置编码格式。 所以我只能把nacos中配置文件里的注释含泪删除调试试看 打包 jar包启动&#xff0c;咦真的少了很多 但是有一个异常…

515Nod 1126 求递推序列的第n项【矩阵快速幂】

有一个序列是这样定义的&#xff1a;f(1) 1, f(2) 1, f(n) (A * f(n - 1) B * f(n - 2)) mod 7.给出A&#xff0c;B和N&#xff0c;求f(n)的值。Input输入3个数&#xff1a;A,B,N。数字之间用空格分割。(-10000 < A, B < 10000, 1 < N < 10^9) Output输出f(n)的…

特殊表情存数据库处理

开发途中遇到评价的功能&#xff0c;需要存入表情符号比如&#xff1a; 以及这种 存入数据库的时候会抛出异常&#xff0c;\x86\啥的 百度解决办法是 数据库改utf8mb4 但是测试改表的字符集并没有用&#xff0c; 然后我也没敢改库的字符集仍然使用utf8 我的解决办法是代码层…