Kafka学习记录(三)——Broker
Kafka学习记录(三)——Broker
目录
- Kafka学习记录(三)——Broker
- 对应课程
- Zookeeper存储的Kafka信息
- Broker总体工作流程
- Broker的服役和退役
- Kafka副本
- 概述
- Leader和Follower故障处理
- 手动调整分区副本的存储&增加副本因子
- Leader Partition负载平衡
- 文件存储
- 文件存储机制
- Kafka高效读写数据
对应课程
【尚硅谷】2022版Kafka3.x教程(从入门到调优,深入全面)
Zookeeper存储的Kafka信息
启动Zookeeper客户端,在目录/opt/module/zookeeper-3.5.7下:
bin/zkCli.sh
通过ls命令查看kafka相关的信息:
ls /kafka
比较重要的:
- /kafka/brokers/ids [0,1,2] 记录了Kafka集群中正常运行中的服务器
- /kafka/brokers/topics/{主题名}/partitions/{分区号}/state 记录了主题分区的"Leader"所在的节点,以及和"Leader"保持联络的"Follower"的节点
- /kafka/contoller 记录了辅助选举的contoller所在的节点
Broker总体工作流程
几点说明:
- 分区中的所有副本统称为AR(Assigned Replicas);
- 所有与leader副本保持一定程度同步的副本(包括leader副本在内)组成ISR(In-Sync Replicas),ISR集合是AR集合中的一个子集;
- 与leader副本同步滞后过多的副本(不包括leader副本)组成OSR(Out-of-Sync Replicas)。
AR=ISR+OSRAR = ISR+OSR AR=ISR+OSR
AR的先后顺序是Kafka启动时已经固定的。
Contoller的工作可以概括为:几个节点的Contoller争抢主控制+组织主题分区Leader的选举+监听各节点的变化+向Zookeeper上传数据
设置参数replica.lag.time.max.ms:在ISR中,如果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢ISR 。该时间阈值默认为30s 。
Broker的服役和退役
Kafka3.x修改主题的副本数和负载节点数
Kafka副本
概述
1)作用:提高数据的可靠性;
2)Kafka默认有一个副本,生产环境一般配置2个,以保证数据的可靠性;太多副本会增加磁盘的存储空间,增加网络上数据传输负担,降低效率;
3)Kafka中副本分为:Leader和Follower。Kafka生产者只会把数据发往Leader,然后Leader向Follower同步数据;
4)分区中的所有副本统称为AR(Assigned Replicas)。
5)主题分区的Leader选举规则:Controller辅助选举,在ISR存货的前提下,按照AR中排在前面的副本优先被选为Leader。
Leader和Follower故障处理
LEO(Log End Offset):每个副本的最后一个offset,LEO其实就是最新的offset + 1。
HW(High Watermark):所有副本中最小的LEO。
Follower故障后
1)该Follower会被临时踢出ISR;
2)这个期间Leader和Follower继续接收数据;
3)待该Follower恢复后,Follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向Leader进行同步;
4)等该Follower的LEO大于等于Partition的HW时,即Follower赶上了集群,就可以重新加入ISR了。
Leader故障后
1)Leader发生故障之后,会从ISR中选出一个新的Leader;
2)为保证多个副本之间的数据一致性,其余的Follower会先将各自的log文件高于HW的部分截掉,然后从新的Leader同步数据。
手动调整分区副本的存储&增加副本因子
Kafka3.x修改主题的副本数和负载节点数
Leader Partition负载平衡
正常情况下,Kafka本身会自动把Leader Partition均匀分散在各个机器上,来保证每台机器的读写吞吐量都是均匀的。但是如果某些broker宕机,会导致Leader Partition过于集中在其他少部分几台broker上,这会导致少数几台broker的读写请求压力过高,其他宕机的broker重启之后都是follower partition,读写请求很低,造成集群负载不均衡。
auto.leader.rebalance.enable默认为true,自动Leader Partition 平衡。生产环境中,leader 重选举的代价比较大,可能会带来性能影响,建议设置为false关闭。
leader.imbalance.per.broker.percentage默认10%,每个broker 允许的不平衡的leader的比率。如果每个broker 超过了这个值,控制器会触发leader 的平衡。
leader.imbalance.check.interval.seconds默认值300 秒。检查leader 负载是否平衡的间隔时间。
文件存储
文件存储机制
Topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是Producer生产的数
据。Producer生产的数据会被不断追加到该log文件末端,为防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制,将每个partition分为多个segment。每个segment包括:“.index”文件、“.log”文件和.timeindex等文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic名称+分区序号,例如:first-0。
详解.log和.index文件:
寻找特定offset=600所在的Record:1)由于600位于5221005之间,因此进入0…0522.index文件;2)在index中进一步确定范围:找到600在587639之间,确定起始Position为6410;3)进入log文件,从Position为6410开始找,确定offset=600位于Position=10090的Record中。
存储配置:log.segment.bytes:Kafka 中 log 日志是分成一块块存储的,此配置是指 log 日志划分成块的大小,默认值 1G 。log.index.interval.bytes:默认值4kb,kafka 里面每当写入了 4kb 大小的日志(.log ),然后就往 index 文件里面记录一个索引 。稀疏索引。
在Kafka中,默认的日志保存时间为 7 天。一旦超过了设置的时间,Kafka中提供的日志清理策略有delete和compact两种 。
如果一个segment中只有部分数据过期,则该segment中的log和index文件不会删除,以timeindex中的最大时间戳为准。
Kafka高效读写数据
1)Kafka 本身是分布式集群,可以采用分区技术,并行度高;
2)读数据采用稀疏索引,可以快速定位要消费的数据;
3)顺序写磁盘:Kafka 的producer 生产数据,要写入到log 文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁盘,顺序写能到600M/s,而随机写只有100K/s。这与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。
4)页缓存 + 零拷贝技术:Kafka的数据加工处理操作交由Kafka生产者和Kafka消费者处理。Kafka Broker应用层不关心存储的数据,所以就不用走应用层,传输效率高。Kafka重度依赖底层操作系统提供的PageCache功能。当上层有写操作时,操作系统只是将数据写入
PageCache。当读操作发生时,先从PageCache中查找,如果找不到,再去磁盘中读取。实际上PageCache是把尽可能多的空闲内存都当做了磁盘缓存来使用。
Kafka学习记录(三)——Broker相关推荐
- Kafka学习记录(四)——消费者
Kafka学习记录(四)--消费者 目录 Kafka学习记录(四)--消费者 对应课程 Kafka消费者工作流程 消费方式和流程 消费者组原理 消费者组初始化流程 消费者组详细消费流程 重要参数 ka ...
- MySQL学习记录 (三) ----- SQL数据定义语句(DDL)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- css学习记录三:文本属性
css学习记录三:CSS文本属性 一.文本属性的作用 二.文本颜色 三.文本对齐 四.装饰文本 五.文本缩进 六.行间距 一.文本属性的作用 CSSS Text(文本)属性可定义文本的外观,比如文本的 ...
- webrtc学习记录三【创建基于RTCPeerConnection本机内的1v1音视频互通】
系列文章目录 webrtc学习记录一[媒体录制MediaRecorder] webrtc学习记录二[基于socket.io创建信令服务器聊天室] 目录 系列文章目录 前言 一.媒体能力的协商过程 1. ...
- 大数据-kafka学习(三)——Kafka Broker
目录 一.Kafka Broker工作 1.1 .zookeeper中存储的kafka信息 1.2.broker总体工作流程 二.kafka副本 2.1.副本的基本信息 2.2.Leader选举流程 ...
- Kafka学习整理三(borker(0.9.0及0.10.0)配置)
Kafka日志本身是由多个日志段组成(log segment).一个日志是一个FileMessageSet,它包含了日志数据以及OffsetIndex对象,该对象使用位移来读取日志数据 * borke ...
- 《你好,放大器》----学习记录(三)
3 多种多样的运算放大器 ADI把放大器分为精密和高速两大类 3.1 精密运放和高速运放 3.1.1 精密运放概述 一般来讲,带宽小于 50MHz 的,能够具有某些特殊指标优异性的运放,都属于精密运放 ...
- Opencv学习记录(三) —— 得到图像中目标物坐标的简单处理算法(望指正与补充)
先描述一下使用场景: 我要识别一个红灯,已经把目标准确的提取出来了,二值图像中白色为目标物,现在要算出二值图中的白色像素点的坐标.因为之后需要移植到树莓派,所以需要高效的方法. ...
- 新浪微博Android客户端学习记录三:完成登录界面和授权界面
本讲完成的效果为: 登录界面的布局代码(login.xml)为: <?xml version="1.0" encoding="utf-8"?> &l ...
最新文章
- 如何完美隐藏Disposable的存储和销毁过程(一)
- 成都python工作-成都找工作|成都人才网|成都全职招聘信息-成都58同城
- Lesson 7(12)神经网络的诞生与发展机器学习基本概念
- 数学建模十大算法(收藏)
- lnmp搭建的常见错误
- 新一代 Tor发布, 它牛在哪里
- 在gluster中配置distributed 卷
- SqlServer-函数
- 软工专硕考研_2021考研人数将突破400万?录取率或成史低!
- input美化上传按钮美化
- zabbix 邮件报警配置
- mysql数据排序问题
- 2019下半年软件设计师下午题
- 初试 Coding.net 在线IDE——WebIDE
- python爬取微信公众号network_python如何爬取搜狗微信公众号文章永久链接的思路解析...
- 零基础的小白入门,SQL数据库与Python先学哪个更好呢?
- 你知道为什么zip始终不兼容rar吗?
- ad批量走线_AD中 蛇形走法、多条网络同时布线、交互布线、logo、差分走线、3D...
- lc滤波电路电感电容值选择_几种常见的无源滤波电路
- BOM:window对象的方法之定时器setTimeout()和停止setTimeout()定时器