面试题:Kafka中Controller的作用是什么?选举流程是怎样的?以及如何避免脑裂问题?

这篇具有很好参考价值的文章主要介绍了面试题:Kafka中Controller的作用是什么?选举流程是怎样的?以及如何避免脑裂问题?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目来源

网上冲浪:还不懂分布系统,速看深度剖析Kafka Controller选举过程
在查找关于Kafka单机分区的上限以及分区多了会有怎样的问题的时候,发现了这个比较有趣的问题,就记录了下来。
一般所有的分布式系统,都会涉及到这个问题:脑裂、以及如何避免脑裂问题。

题目描述

  • Kafka中Controller的作用是什么?
  • Kafka中Controller的选举流程是什么?
  • Kafka脑裂是什么?
  • Kafka如何避免脑裂问题?

题目答案

  • Kafka中Controller中的作用是什么?
    – 管理partition的ISR列表:当Follower副本无法及时跟随Leader副本时,Controller会将其从ISR列表中移除。
    – 分区重平衡:当添加或者删除Broker节点时,Controller负责对Partition的分布进行重平衡,以确保数据的均匀分布。
    – 当集群中有一个副本的leader挂掉了,controller需要在集群中选举出一个新的leader,选举的规则是从isr集合中最左边获得。
    – 当集群中新增或者减少broker,controller将该信息同步给其他broker。
    – 当集群中有分区新增或者减少,controller将该信息同步给其他broker。
    – 存储集群元数据
    Controller保存了集群中最全的元数据信息,并通过发送请求同步到其他Broker上面
    – 从我参考文章中的信息来看,Controller节点不负责存储数据。但是好像之前看bilibili视频的时候,Controller节点又是存储数据的。重新思考之后,Controller可能是一个子进程,由Broker进程在竞选Controller成功后创建,可以跟Broker处于同一个节点上面。

  • Kafka集群的Controller选举过程是怎样的?
    – 注册Controller节点
    Kafka集群刚上线时,每个Broker启动时会向zookeeper尝试注册一个/controller节点,因为同一时刻只能存在一个/controller节点,所以只有一个Broker可以成功创建节点并成为Controller,获得的序号最小的那个broker将会作为集群中的controller。
    – 监听Controller节点
    所有非Controller的Broker都会在Zookeeper中对/controller路径设置一个Watcher事件,这样当Controller节点发生变化时(例如Controller失效),所有非Controller就会收到一个Watcher事件。
    – 选举新的Controller
    当某个Broker接收到Controller节点变化的通知后,它会再次尝试在Zookeeper中的/controller路径下创建临时节点。与Kafka集群刚上线时的“注册Controller节点”类似,只有一个Broker能够成功在Zookeeper中创建/controller临时节点,并成为新的Controller。新的Controller会在选举成功后接管集群元数据的管理工作。
    – 更新集群元数据
    新Controller在选举成功后,需要更新集群元数据,包括分区状态、副本状态等。同时,新控制器会通知所有相关的Broker更新他们的元数据信息。这样,集群中所有的Broker都能够知道新Controller的身份,并进行协同工作。
    – 备注
    临时节点的特点是在创建它的客户端(即Broker节点)断开连接时,它会自动被Zookeeper节点删除。这种机制保证了只有一个Broker节点能够成为Controller,以避免多个控制器同时对集群元数据进行操作引发问题。

  • Kafka脑裂是什么?
    脑裂问题是分布式系统中经常出现的现象,Kafka脑裂问题是由于网络或其他原因(比如Full GC)导致多个Broker认为自己是Controller,从而导致元数据不一致和分区状态混乱的问题。

  • Kafka脑裂是怎么产生的?Kafka和Zookeeper是如何避免脑裂问题?
    – 假设有三个Broker,a、b、c,其中a是Controller。此时的epoch number是1(Kafka是通过epoch number(纪元编号)解决脑裂问题)。
    – 现在a因为full gc时间过程,导致与zookeeper的会话超时了。zookeeper就会删除/controller节点,并通知b和c竞选Controller节点。
    – b和c 参加竞选,假设b成为了新的Controller,将epoch number的值设置为2。之后b就会向c同步新的元数据信息,通c更新元数据信息。
    – a结束Full GC后,继续向b和c同步数据,b和c发现epoch number小于自己当前保存的epoch number的值,就会拒绝a的管理,并通知a当前最新的epoch number是2了,a就会知道自己已经不是Controller了,最后与b重新建立连接,并从b同步最新的元数据。这样就解决了脑裂的问题。

参考

题目来源:还不懂分布系统,速看深度剖析Kafka Controller选举过程文章来源地址https://www.toymoban.com/news/detail-856871.html

到了这里,关于面试题:Kafka中Controller的作用是什么?选举流程是怎样的?以及如何避免脑裂问题?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【面试题06】Trait是什么,有什么作用

    本文已收录于PHP全栈系列专栏:PHP面试专区。 计划将全覆盖PHP开发领域所有的面试题, 对标资深工程师/架构师序列 ,欢迎大家提前关注锁定。 记得多年前面试的时候被面试官问到Trait,当时一脸懵,其实现在它在各个项目或者框架中已经被广泛使用,主要也是为了对现有的

    2024年02月10日
    浏览(35)
  • springcloud的组件及其作用以及面试相关问题

    Spring Cloud 是一个用于构建分布式系统和微服务架构的开发工具包,它基于Spring框架,提供了一系列组件和模块来简化分布式系统的开发和管理。以下是一些常见的Spring Cloud组件及其作用的介绍: Eureka(服务注册与发现):Eureka是一个基于REST的服务注册和发现组件,用于管理

    2024年02月11日
    浏览(39)
  • JS面试题:说一下什么是作用域、作用域链?

    说一下执行上下文的理解?     在 代码执行前 产生     产生变量提升、函数提升的原因     定义:         全局执行上下文对象:在执行全局代码前,创建对应的全局执行上下文对象,即window对象,进行预处理         函数执行上下文对象:在调用函数后、准备执行函数

    2024年01月25日
    浏览(58)
  • 软件测试面试怎样介绍自己的测试项目?会问到什么程度?

    想知道面试时该怎样介绍测试项目?会问到什么程度? 那就需要换位思考, 思考HR在这个环节想知道什么。 HR在该环节普遍想获得的情报主要是下面这2个方面: 1)应聘者的具体经验和技术能力, 2)应聘者的团队的沟通能力、合作能力和问题解决能力。 了解到HR目的后,我

    2024年02月05日
    浏览(51)
  • 【面试】什么是霍桑效应,在项目中具体要怎样使用霍桑效应呢?

    其实霍桑效应(Hawthorne Effect)是一种很经典的组织行为学现象,它阐述了被观察者会因知晓自己被观察而改变自己的行为。在项目管理中,我们可以通过霍桑效应来激励团队提高工作效率。具体运用可以从以下几个方面: 告知被观察 - 明确地让团队成员知道自己的工作将被

    2024年02月06日
    浏览(41)
  • Git基本操作:版本打Tag的作用以及基本操作流程

    作用介绍 在git代码管理时,有时候我们想对某个特定的commit 添加标记,比如要标识版本信息,这时候就可以用的git中的打标签功能。 打tag就类似于我们看书放书签一样,以后可以直接用tag找到提交的位置,不然的话,就只有看commit的哈希值返回指定位置,比较繁琐。 特别强

    2024年02月13日
    浏览(44)
  • 面试题-TS(三):TypeScript 中的接口是什么?它们有什么作用?

    面试题-TS(3):TypeScript 中的接口是什么?它们有什么作用? 在TypeScript中,接口是一种用于定义对象属性和行为的工具。它们充当了代码之间的契约,描述了对象应该具有的属性和方法。通过使用接口,我们可以提供更好的类型检查、模块化和代码复用。 一、接口的定义和使

    2024年02月15日
    浏览(48)
  • zookeeper选举流程源码分析

    zookeeper选举流程源码分析 选举的代码主要是在 QuorumPeer.java 这个类中。 它有一个内部枚举类,用来表示当前节点的状态。 LOOKING: 当前节点在选举过程中 FOLLOWING:当前节点是从节点 LEADING: 当前节点是主节点 OBSERVING: 当前节点是观察者状态,这种状态的节点不参与选举的投

    2024年02月11日
    浏览(42)
  • 【JavaSE】什么是抽象类?什么是内部类?以及它们的作用是什么?

     这篇文章我们主要学习的是两个知识点,可以来解决文章标题所提出来的三个问题。   目录 1.抽象类 1.1 抽象类概念 1.2 抽象类语法 1.3 抽象类特性 1.4 抽象类的作用 2.内部类 2.1 内部类的分类 2.2 实例内部类 2.3 静态内部类 2.4 匿名内部类 2.5 局部内部类 在多态的学习中,我们

    2024年02月14日
    浏览(53)
  • JavaScript中的作用域(scope)是什么?以及有哪些类型的作用域?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包