对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,一经查实,立即删除!

相关文章

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”,一般为系统…

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

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

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项目…

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…

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 我的解决办法是代码层…

转 【MQTT】在Windows下搭建MQTT服务器

MQTT简介 MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议&#xff0c;设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。该协议的特点有&#xff1a; 使用发布/订阅消息模式&#xff0c;提供一对多的消息发布&#xff0c;解除应用程序耦合。…

记录一次StackOverflowError问题

StackOverflowError Idea启动一直抛出StackOverflowError栈溢出&#xff0c;大概率是跟刚写的代码相关 public class WebServiceConfig {private static WebServiceConfig cfg new WebServiceConfig();// Web服务的URLprivate String address;// Web服务接口private Class s…

多数据源处理-苞米豆-dynamic

微服务项目虽然每个服务可以单独使用一个库&#xff0c;但是某些特定服务&#xff0c;如调度中心服务&#xff0c;定时任务等&#xff0c;如果还是使用rpc或者fegin频繁进行远程调用&#xff0c;总感觉不是很合适 所以对单服务进行了多数据源处理 使用的是苞米豆的 dynamic-d…

Druid的外网访问异常

本地启动访问无异常&#xff0c;部署至Linux服务器后无法访问 #合并多个DruidDataSource的监控数据use-global-data-source-stat: truestat-view-servlet:login-username: adminlogin-password: adminreset-enable: falseurl-pattern: /druid/*# 添加IP白名单allow: "&quo…

Linux项目第一次访问非常慢,后来很快的异常

最近项目本地访问和测试服务器访问都没出现访问很慢的问题。 近期要上生产部署&#xff0c;所以对生产环境的组件及各服务进行了部署&#xff0c;部署完成后进行测试发现请求耗时异常 比如一个订单查询请求&#xff0c;第一次请求耗时5m 或者15s 而且很有规律&#xff0c;不多…

spring注解大全

【转载】https://www.cnblogs.com/zxf330301/articles/6559210.html spring component的作用 1、controller 控制器&#xff08;注入服务&#xff09; 2、service 服务&#xff08;注入dao&#xff09; 3、repository dao&#xff08;实现dao访问&#xff09; 4、component &am…

Flink1.12.0使用过程中遇到的异常

1.Record has Long.MIN_VALUE timestamp ( no timestamp marker). Is the time characteristic set to ProcessingTime, or did you forget to call DataStream.assignTimestampsAndWatermarks(...)? 解决办法&#xff1a; 时间窗口事件选择此方法&#xff0c;Time导包也需要…

多个字段条件相同进行分组并过滤拼装SQL

select posts,term,user_name,GROUP_CONCAT(put_department) put_dept from hrbp_info group by posts,term,user_name having count(*)>1

一道清华期中考试题(逃)

据出题的jzh老师所说... 求和【问题描述】组合数 C(n,m)是从 n 个物品中取 m 个的方案数。C(n,m)(n!)/(m!(n-m)!)斐波那契数列 F 满足&#xff0c; F[0]F[1]1&#xff0c; n≥2 时 F[n]F[n-1]F[n-2]给出 n&#xff0c;求 C(n,0)F[0]C(n,1)F[1]…C(n,n)F[n]【输入格式】一行一个…

记录docker-Skywalking集成es7异常处理

遇到的问题&#xff1a; es7容器启动成功 skywalking的oap容器启动一直在restart 启动失败 处理过程&#xff1a; 1.docker logs oap容器ID 2.对应处理解决 PUT http://192.168.1.10:9200/_cluster/settings { “transient”: { “cluster”: { “max_shards_per_node”:1…