首页 > 其他 > 详细

Apache Kafka源码分析 – Controller

时间:2014-02-27 13:46:01      阅读:637      评论:0      收藏:0      [点我收藏+]

https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Controller+Internals

In a Kafka cluster, one of the brokers serves as the controller, which is responsible for managing the states of partitions and replicas and for performing administrative tasks like reassigning partitions.

Controller是为了加入replica机制而创建的,0.7时broker之间没有很强的关联,而由于现在每个topic partition都需要考虑,将replicas放在哪个broker上,并要处理例如reassignment或delete等操作,所以需要有个master来协调,于是就加入了controller

ControllerContext

其中关键是记录所有topics的partitions和replicas间关系,包括assignment和leadship关系

bubuko.com,布布扣

PartitionStateMachine

加入replica是很复杂的设计,其中重要的一点就是要考虑partitions和replicas中不同情况下的处理
这里先看看Partition的各种state,以及state之间的状态机
NonExistentPartition,不存在或被删掉的p,前一个状态是OfflinePartition
NewPartition, 刚被创建,但还没有完成leader election, 前一个状态是NonExistentPartition
OnlinePartition,具有leader,正常状态,前一个状态是NewPartition/OfflinePartition
OfflinePartition,leader die的时候partition会变为offline,前一个状态是NewPartition/OnlinePartition
这里NewPartition和OfflinePartition都是没有leader的状态,为何要区别开来?见下

bubuko.com,布布扣

核心函数handleStateChanges,对于每个topicAndPartition调用状态机函数handleStateChange,然后把结果告诉每个brokers

bubuko.com,布布扣

状态机函数的具体逻辑, 其他的状态变化都比较简单
唯有,在变成OnlinePartition的时候,需要区分new或offline两种状况,下面具体看下

bubuko.com,布布扣

对于初始化leader只需要取出liveAssignedReplicas的head
而对于offline,需要优先ISR中的,然后才是AR中的 (大部分情况下,AR和ISR是一样的, 只有在onPartitionReassignment的时候,会有所不同,具体看后面的例子)

NewPartition->OnlinePartition

bubuko.com,布布扣
OfflinePartition,OnlinePartition->OnlinePartition
bubuko.com,布布扣
OfflinePartitionLeaderSelector

bubuko.com,布布扣

未完。。。

Apache Kafka源码分析 – Controller,布布扣,bubuko.com

Apache Kafka源码分析 – Controller

原文:http://www.cnblogs.com/fxjwind/p/3569518.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!