当前位置: 首页 > news >正文

Kafka知识总结(选举机制+控制器+幂等性)

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

选举机制

控制器(Broker)选举

控制器就是一个Borker。

在Kafka集群中,有多个Broker节点,但是它们之间需要选举出一个Leader,其他的Broker充当Follower角色。

集群中第一个启动的Broker会通过在Zookeeper中创建临时节点/controller来让自己成为控制器。

其他Broker启动时也会在Zookeeper中创建临时节点,但是发现节点已经存在,所以它们会收到一个异常,意识到控制器已经存在,那么就会在Zookeeper中创建Watch对象,便于它们收到控制器变更的通知。

优先副本选举

如果一个分区的Leader副本不可用,就意味着整个分区不可用,此时需要从Follower副本中选举出新的Leader副本提供服务。

优先副本

指一个分区所在的AR集合的第一个副本。

比如分区1,它的AR集合是[2,0,1],表示分区1的优先副本就是在Broker2上。

  • 理想情况下,优先副本应该就是Leader副本。

对分区Leader副本进行选举的时候,尽可能让优先副本成为Leader副本。

在这里插入图片描述

控制器

控制器主要作用是在 ZooKeeper 的帮助下管理和协调整个 Kafka 集群。

集群中任意一台 Broker 都能充当控制器的角色,但是在运行过程中只能有一个 Broker 成为控制器。

Broker 在启动时,会尝试去 ZooKeeper 中创建 /controller 节点。

第一个成功创建 /controller 节点的 Broker 会被指定为控制器。

控制器的作用:

1.主题管理(创建、删除、增加分区)

2.分区重分配

3.Preferred 领导者选举

4.集群成员管理(新增 Broker、Broker 主动关闭、Broker 宕机)

自动检测新增 Broker、Broker 主动关闭及被动宕机。

  • 比如,控制器组件会利用Watch 机制检查 ZooKeeper 的 /brokers/ids 节点下的子节点数量变更。

目前,当有新 Broker 启动后,它会在 /brokers 下创建专属的 znode 节点。

一旦创建完毕,ZooKeeper 会通过 Watch 机制将消息通知推送给控制器。

5.数据服务

向其他 Broker 提供数据服务。控制器上保存了最全的集群元数据信息,其他所有 Broker 会定期接收控制器发来的元数据更新请求,从而更新其内存中的缓存数据。

控制器故障转移(Failover)

当运行中的控制器突然宕机或意外终止时,Kafka 能够快速地感知到,并立即启用备用控制器来代替之前失败的控制器。

  • 该过程是自动完成的。

在这里插入图片描述

幂等性

0.11.0.0 版本支持增加了对幂等的支持。幂等是针对生产者角度的特性。幂等可以保证上生产者发送的消息,不会丢失,而且不会重复。

开启幂等性配置

只需要把 Producer 的配置 enable.idempotence 设置为 true 即可

props.put(“enable.idempotence”, ture)
//或者
props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIGtrue)

底层具体实现原理就是用空间换时间的优化思路,即在broker端多存一些字段来标识数据的唯一性。

当Producer发送了具有相同字段值的消息后,broker会进行匹配去重,丢弃重复的数据。

他只能保证单分区上的幂等性,即一个幂等性Producer只能够保证某个topic的一个分区上不出现重复消息,无法实现多分区的幂等。此外,如果Producer重启,也会导致幂等重置。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在 Elasticsearch 中实现采集自动扩展
  • Python urllib请求https接口报错
  • python异步编程,协程
  • java中的函数式接口介绍
  • python inf是什么意思
  • Centos安装、迁移gitlab
  • 数据透视——判别分析
  • 刷新历史新高后又大跌!剖析黄金现在适合投资吗?
  • 编程的魅力、学习路径、应用领域以及对未来的影响
  • docker笔记5-数据卷
  • vue2根据选中的日期动态渲染表格的列
  • 计算机视觉技术在医疗诊断中的应用如何确保数据隐私和安全性,同时又能实现精准的病情分析?
  • 详解Pku2352 数星星Stars以及star加强版
  • 从匿名内部类到Lambda再到方法引用
  • 53、PHP 实现归并排序
  • 2017 年终总结 —— 在路上
  • Angular6错误 Service: No provider for Renderer2
  • AngularJS指令开发(1)——参数详解
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • classpath对获取配置文件的影响
  • HTML中设置input等文本框为不可操作
  • IOS评论框不贴底(ios12新bug)
  • JavaWeb(学习笔记二)
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • React组件设计模式(一)
  • uva 10370 Above Average
  • vue-router的history模式发布配置
  • vue数据传递--我有特殊的实现技巧
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 分布式任务队列Celery
  • 给新手的新浪微博 SDK 集成教程【一】
  • 马上搞懂 GeoJSON
  • 如何设计一个微型分布式架构?
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 白色的风信子
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • # 安徽锐锋科技IDMS系统简介
  • #07【面试问题整理】嵌入式软件工程师
  • #1014 : Trie树
  • #数据结构 笔记三
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (windows2012共享文件夹和防火墙设置
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)WCF的Binding模型
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (接口自动化)Python3操作MySQL数据库
  • (四)linux文件内容查看
  • (已解决)什么是vue导航守卫
  • (译) 函数式 JS #1:简介
  • (原創) 物件導向與老子思想 (OO)
  • (转) ns2/nam与nam实现相关的文件
  • ***监测系统的构建(chkrootkit )