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

比较重要的:

  1. /kafka/brokers/ids [0,1,2] 记录了Kafka集群中正常运行中的服务器
  2. /kafka/brokers/topics/{主题名}/partitions/{分区号}/state 记录了主题分区的"Leader"所在的节点,以及和"Leader"保持联络的"Follower"的节点
  3. /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相关推荐

  1. Kafka学习记录(四)——消费者

    Kafka学习记录(四)--消费者 目录 Kafka学习记录(四)--消费者 对应课程 Kafka消费者工作流程 消费方式和流程 消费者组原理 消费者组初始化流程 消费者组详细消费流程 重要参数 ka ...

  2. MySQL学习记录 (三) ----- SQL数据定义语句(DDL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  3. css学习记录三:文本属性

    css学习记录三:CSS文本属性 一.文本属性的作用 二.文本颜色 三.文本对齐 四.装饰文本 五.文本缩进 六.行间距 一.文本属性的作用 CSSS Text(文本)属性可定义文本的外观,比如文本的 ...

  4. webrtc学习记录三【创建基于RTCPeerConnection本机内的1v1音视频互通】

    系列文章目录 webrtc学习记录一[媒体录制MediaRecorder] webrtc学习记录二[基于socket.io创建信令服务器聊天室] 目录 系列文章目录 前言 一.媒体能力的协商过程 1. ...

  5. 大数据-kafka学习(三)——Kafka Broker

    目录 一.Kafka Broker工作 1.1 .zookeeper中存储的kafka信息 1.2.broker总体工作流程 二.kafka副本 2.1.副本的基本信息 2.2.Leader选举流程 ...

  6. Kafka学习整理三(borker(0.9.0及0.10.0)配置)

    Kafka日志本身是由多个日志段组成(log segment).一个日志是一个FileMessageSet,它包含了日志数据以及OffsetIndex对象,该对象使用位移来读取日志数据 * borke ...

  7. 《你好,放大器》----学习记录(三)

    3 多种多样的运算放大器 ADI把放大器分为精密和高速两大类 3.1 精密运放和高速运放 3.1.1 精密运放概述 一般来讲,带宽小于 50MHz 的,能够具有某些特殊指标优异性的运放,都属于精密运放 ...

  8. Opencv学习记录(三) —— 得到图像中目标物坐标的简单处理算法(望指正与补充)

    先描述一下使用场景: 我要识别一个红灯,已经把目标准确的提取出来了,二值图像中白色为目标物,现在要算出二值图中的白色像素点的坐标.因为之后需要移植到树莓派,所以需要高效的方法.             ...

  9. 新浪微博Android客户端学习记录三:完成登录界面和授权界面

    本讲完成的效果为: 登录界面的布局代码(login.xml)为: <?xml version="1.0" encoding="utf-8"?> &l ...

最新文章

  1. 如何完美隐藏Disposable的存储和销毁过程(一)
  2. 成都python工作-成都找工作|成都人才网|成都全职招聘信息-成都58同城
  3. Lesson 7(12)神经网络的诞生与发展机器学习基本概念
  4. 数学建模十大算法(收藏)
  5. lnmp搭建的常见错误
  6. 新一代 Tor发布, 它牛在哪里
  7. 在gluster中配置distributed 卷
  8. SqlServer-函数
  9. 软工专硕考研_2021考研人数将突破400万?录取率或成史低!
  10. input美化上传按钮美化
  11. zabbix 邮件报警配置
  12. mysql数据排序问题
  13. 2019下半年软件设计师下午题
  14. 初试 Coding.net 在线IDE——WebIDE
  15. python爬取微信公众号network_python如何爬取搜狗微信公众号文章永久链接的思路解析...
  16. 零基础的小白入门,SQL数据库与Python先学哪个更好呢?
  17. 你知道为什么zip始终不兼容rar吗?
  18. ad批量走线_AD中 蛇形走法、多条网络同时布线、交互布线、logo、差分走线、3D...
  19. lc滤波电路电感电容值选择_几种常见的无源滤波电路
  20. BOM:window对象的方法之定时器setTimeout()和停止setTimeout()定时器

热门文章

  1. mac上查看wifi密码明文
  2. springboot拦截器验证token实现登陆
  3. 盗墓热再起!我爬取了6万条《重启之极海听雷》的评论,发现了这些秘密
  4. 当不想用正则时就自己动手识文断字
  5. K-Touch/天语W808 root教程_方法
  6. 使用PE U盘系统中的PM添加、删除以及格式化分区
  7. 前端 - 三种方式给数字加上千分位分隔符
  8. 7-14 英文单词排序
  9. 【基础算法】Dijkstra算法,以上海地铁换乘为例,计算最短换乘路径和时间
  10. spring源码环境编译问题