1. 监控工具Kafka-eagle介绍

省略

2. Kafka原理

2.1 分区的leader与follower

2.1.1 Leader和Follower

在Kafka中,每个topic都可以配置多个分区以及多个副本。每个分区都有一个leader以及0个或者多个follower,在创建topic时,Kafka会将每个分区的leader均匀地分配在每个broker上。我们正常使用kafka是感觉不到leader、follower的存在的。但其实,所有的读写操作都是由leader处理,而所有的follower都复制leader的日志数据文件,如果leader出现故障时,follower就会被选举为leader。所以,可以这样说:

  • Kafka中的leader负责处理读写操作,而follower只负责副本数据的同步
  • 如果leader出现故障,其他follower会被重新选举为leader
  • follower像一个consumer一样,拉取leader对应分区的数据,并保存到日志数据文件中


总结:

  • Kafka中的leader和follower是相对分区有意义,不是相对broker
  • Kafka在创建topic的时候,会尽量分配分区的leader在不同的broker中,其实就是负载均衡
  • leader职责:读写数据
  • follower职责:同步数据、参与选举(leader crash之后,会选举一个follower重新成为分区的leader
  • 注意和ZooKeeper区分
    • ZK的leader负责读、写,follower可以读取
    • Kafka的leader负责读写、follower不能读写数据(确保每个消费者消费的数据是一致的),Kafka一个topic有多个分区leader,一样可以实现数据操作的负载均衡

2.1.2 查看某个partition的leader

2.1.3 AR、ISR、OSR

在实际环境中,leader有可能会出现一些故障,所以Kafka一定会选举出新的leader。在讲解leader选举之前,我们先要明确几个概念。Kafka中,把follower可以按照不同状态分为三类——AR、ISR、OSR。

  • 分区的所有副本称为 「AR」(Assigned Replicas——已分配的副本)
  • 所有与leader副本保持一定程度同步的副本(包括 leader 副本在内)组成 「ISR」(In-Sync Replicas——在同步中的副本)
  • 由于follower副本同步滞后过多的副本(不包括 leader 副本)组成 「OSR」(Out-of-Sync Replias)
  • AR = ISR + OSR
  • 正常情况下,所有的follower副本都应该与leader副本保持同步,即AR = ISR,OSR集合为空。

2.1.4 查看分区的ISR

  1. 使用Kafka Eagle/Kafka Manager查看某个Topic的partition的ISR有哪几个节点。
  2. 尝试关闭id为0的broker(杀掉该broker的进程),参看topic的ISR情况。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/c05682c32e194f8895156bada44091f6.png

2.1.5 Leader选举

leader对于消息的写入以及读取是非常关键的,此时有两个疑问:

  1. Kafka如何确定某个partition是leader、哪个partition是follower呢?
  2. 某个leader崩溃了,如何快速确定另外一个leader呢?因为Kafka的吞吐量很高、延迟很低,所以选举leader必须非常快

2.1.5.1 如果leader崩溃,Kafka会如何?

使用Kafka Eagle/Kafka Manager找到某个partition的leader,再找到leader所在的broker。在Linux中强制杀掉该Kafka的进程,然后观察leader的情况。
通过观察,我们发现,leader在崩溃后,Kafka又从其他的follower中快速选举出来了leader。

2.1.5.2 Controller介绍

  • Kafka启动时,会在所有的broker中选择一个controller
  • 前面leader和follower是针对partition,而controller是针对broker的
  • 创建topic、或者添加分区、修改副本数量之类的管理任务都是由controller完成的
  • Kafka分区leader的选举,也是由controller决定的

2.1.5.3 Controller的选举

  • 在Kafka集群启动的时候,每个broker都会尝试去ZooKeeper上注册成为Controller(ZK临时节点)
  • 但只有一个竞争成功,其他的broker会注册该节点的监视器
  • 一点该临时节点状态发生变化,就可以进行相应的处理
  • Controller也是高可用的,一旦某个broker崩溃,其他的broker会重新注册为Controller

2.1.5.4 找到当前Kafka集群的controller

  1. 点击Kafka Tools的「Tools」菜单,找到「ZooKeeper Brower…」
  2. 点击左侧树形结构的controller节点,就可以查看到哪个broker是controller了。
2.1.5.5 测试controller选举

2.1.5.6 Controller选举partition leader

  1. 所有Partition的leader选举都由controller决定
  2. controller会将leader的改变直接通过RPC的方式通知需为此作出响应的Broker
  3. controller读取到当前分区的ISR,只要有一个Replica还幸存,就选择其中一个作为leader
  4. 如果该partition的所有Replica都已经宕机,则新的leader为-1

partition的leader平衡工具的引入
为了能让partition和replica均匀的分布在broker上,防止一台机器负载较高。有如下分配算法:

  1. 将所有N Broker和待分配的i个Partition排序.
  2. 将第i个Partition分配到第(i mod n)个Broker上.
  3. 将第i个Partition的第j个副本分配到第((i + j) mod n)个Broker上
  4. topic初始创建后,就会符合上述分配。

为什么不能通过ZK的方式来选举partition的leader?

  • Kafka集群如果业务很多的情况下,会有很多的partition
  • 假设某个broker宕机,就会出现很多的partiton都需要重新选举leader
  • 如果使用zookeeper选举leader,会给zookeeper带来巨大的压力。所以,kafka中leader的选举不能使用ZK来实现。

2.1.6 leader负载均衡

2.1.6.1 Preferred Replica

  1. Kafka中引入了一个叫做「preferred-replica」的概念,意思就是:优先的Replica
  2. 在ISR列表中,第一个replica就是preferred-replica
  3. 第一个分区存放的broker,肯定就是preferred-replica
    执行以下脚本可以将preferred-replica设置为leader,均匀分配每个分区的leader。

引入preferred-replica概念,ISR列表里,第一个replica就是preferred-replica。broker宕机后变为follower,但是ISR的preferred-replica一直不会变,执行kafka-preferred-replica-election.sh脚本就是把****preferred-replica选为leader的过程。

kafka-preferred-replica-election.sh --zookeeper node1:2181,node2:2181,node3:2181

Kafka从入门到精通(八)Kafka原理相关推荐

  1. 副本与ISR设计--Kafka从入门到精通(十四)

    上篇文章说了,broker的消息设计,采用紧凑的byteBuffer,存储设计主要包含attribute后三个表示压缩类型,还有crc效验,以及key和value,后面新增了时间戳. Broker消息 ...

  2. Kali Linux 从入门到精通(八)-主动信息收集

    Kali Linux 从入门到精通(八)-主动信息收集 基本介绍 直接与目标系统交互通信 无法避免留下访问的痕迹 使用受控的第三方电脑进行探测 使用代理或已经被控制的主机 做好被封杀的准本 使用噪声迷 ...

  3. C4D致富经典入门到精通(八)

    材质与纹理 C4D基础界面的介绍与常用快捷键:  C4D致富经典入门到精通(一) C4D父子关系的理解与创建参数几何体与可编辑对象: C4D致富经典入门到精通(二) C4D样条曲线创建 :   C4D ...

  4. kafka从入门到精通:mysql绿色版闪退

    前言 俗话说"生于忧患,死于安乐",其实大部分中年危机,就是在安乐中产生的. 有的人或许会反驳,"照你这么说,我还必须奋斗了,不奋斗就要死,难道选择安逸的生活就不对吗?我 ...

  5. kafka从入门到精通:Java设置全局变量传值

    如何高效的学习MyBatis源码呢? 市面上真正适合学习的MyBatis资料太少,有的书或资料虽然讲得比较深入,但是语言晦涩难懂,大多数人看完这些书基本都是从入门到放弃.学透MyBatis源码难道就真 ...

  6. Kafka从入门到精通学习笔记

    前言: 新公司消息队列用选用卡夫卡,刚好之前没有用这个消息队列过借此机会学习一波.发现大公司都喜欢用这款消息队列. 消息队列中间件的使用并不复杂,但消息队列的选型一直是个难点.比如: 不同业务场景下该 ...

  7. 数独游戏技巧从入门到精通_从入门到精通八讲 | 高效氮化镓电源设计第六讲—EMC优化和整改技巧...

    氮化镓电源设计从入门到精通,这个系列直播共分为八讲,本篇第六讲将为您介绍EMC优化和整改技巧,助您完成电源工程师从入门到精通的蜕变. 前期回顾(点击下方内容查看上期直播): - 第一讲:元器件选型 - ...

  8. 消费者组consumer group详解-Kafka从入门到精通(九)

    上篇文章说了,kafka可以通过实现partitioner自定义分区,producer拦截器,拦截器是在producer发送消息之后,回调之前调用,里面主要重写两个方法,一个是onSend,可以重新定 ...

  9. Kafka从入门到精通(七)分区和副本机制

    1. 分区和副本机制 1.1 生产者分区写入策略 生产者写入消息到topic,Kafka将依据不同的策略将数据分配到不同的分区中 轮询分区策略 随机分区策略 按key分区分配策略 自定义分区策略 1. ...

最新文章

  1. 设置mysql默认字符集_MySQL之修改默认引擎和字符集
  2. 猫抓老鼠-Java面向对象特点梳理
  3. android 5.0 模拟sd卡,如何使用为Android5.0(Lolliop)提供的新的SD卡访问API?
  4. asp.net C# 将数据导出到Execl汇总
  5. yum 下载RPM包而不进行安装
  6. 【大数据】Linux下Storm(0.9版本以上)的环境配置和小Demo
  7. 用这10个小技巧加速Python编程
  8. php 人像识别,基于OpenCV的PHP图像人脸识别技术
  9. Convolutional Neural Networks (CNNs / ConvNets)
  10. spring扩展点三:@Import注解
  11. windows下批量更改文件后缀
  12. MATLAB与信号处理
  13. MyEclipse配置Tomcat 7
  14. python3.6实现的A星算法
  15. cesium 页面多 viewer 地图加载过缓解决方案
  16. 思科 计算机网络 测试
  17. matlab中integrator,matlab:Simulink Integrator的理解
  18. 【tf.keras】官方教程一 Keras overview
  19. html下拉菜单图片,JS+CSS 制作的超级简单的下拉菜单附图
  20. 防追踪创安全网络环境 EFF推Beta版“Privacy Badger”扩展

热门文章

  1. pdf图片如何转可编辑文字,加密pdf如何破解,你也能轻松学会的pdf处理技能
  2. C++设计模式----装饰器模式
  3. codeforces 819 B(区间加线性函数值)
  4. 测试测试是打卡机坑了大家
  5. WiFi - 访客网络有什么用?怎么开启?
  6. c语言反应能力的手机游戏,锻炼反应能力的游戏合集
  7. html给文字添加音标
  8. 百度移动专区如何绑定站点
  9. 应届毕业生到底有哪些优势呢
  10. comsol—偏振光仿真