课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > kafka知识点:kafka HA
  • kafka知识点:kafka HA

    发布:昆明Java培训      来源:达内新闻      时间:2016-10-21

  • 昆明Java培训的老师今天给大家讲kafka HA。

    5.1 replication

    同一个partition可能会有多个replica(对应server.properties配置中的default.replication.factor=N)。没有replica的情况下,一旦broker宕机,其上所有patition的数据都不可被消费,同时producer也不能再将数据存于其上的patition。引入replication之后 同一个partition可能会有多个replica,而这时需要在这些replica之间选出一个leader,producer和consumer只与这个leader交互,其它replica作为follower从leader中复制数据。

    Kafka分配Replica的算法如下:

    1.将所有broker(假设共n个broker)和待分配的partition排序

    2.将第i个partition分配到第(i mod n)个broker上

    3.将第i个partition的第j个replica分配到第((i + j) mode n)个broker上

    5.2 leader failover

    当partition对应的leader宕机时,需要从follower中选举出新leader。在选举新leader时,一个基本的原则是,新的leader必须拥有旧leader commit过的所有消息。

    kafka在zookeeper中(/brokers/.../state)动态维护了一个ISR(in-sync replicas),由3.3节的写入流程可知ISR里面的所有replica都跟上了leader,只有ISR里面的成员才能选为leader。对于f+1个replica,一个partition可以在容忍f个replica失效的情况下保证消息不丢失。

    当所有replica都不工作时,有两种可行的方案:

    1.等待ISR中的任一个replica活过来,并选它作为leader。可保障数据不丢失,但时间可能相对较长。

    2.选择第一个活过来的replica(不一定是ISR成员)作为leader。无法保障数据不丢失,但相对不可用时间较短。

    kafka 0.8.*使用第二种方式。

    kafka通过Controller来选举leader,流程请参考5.3节。

    5.3 broker failover

    kafka broker failover序列

    流程说明:

    1. controller在zookeeper的/brokers/ids/[brokerId]节点注册Watcher,当broker宕机时zookeeper会fire watch

    2. controller从/brokers/ids节点读取可用broker

    3. controller决定set_p,该集合包含宕机broker上的所有partition

    4.对set_p中的每一个partition

    4.1从/brokers/topics/[topic]/partitions/[partition]/state节点读取ISR

    4.2决定新leader(如4.3节所描述)

    4.3将新leader、ISR、controller_epoch和leader_epoch等信息写入state节点

    5.通过RPC向相关broker发送leaderAndISRRequest命令

    5.4 controller failover

    当controller宕机时会触发controller failover。每个broker都会在zookeeper的"/controller"节点注册watcher,当controller宕机时zookeeper中的临时节点消失,所有存活的broker收到fire的通知,每个broker都尝试创建新的controller path,只有一个竞选成功 当选为controller。

    当新的controller当选时,会触发KafkaController.onControllerFailover方法,在该方法中完成如下操作:

    1.读取并增加Controller Epoch。

    2.在reassignedPartitions Patch(/admin/reassign_partitions)上注册watcher。

    3.在preferredReplicaElection Path(/admin/preferred_replica_election)上注册watcher。

    4.通过partitionStateMachine在broker Topics Patch(/brokers/topics)上注册watcher。

    5.若delete.topic.enable=true(默认值是false),则partitionStateMachine在Delete Topic Patch(/admin/delete_topics)上注册watcher。

    6.通过replicaStateMachine在Broker Ids Patch(/brokers/ids)上注册Watch。

    7.初始化ControllerContext对象,设置当前所有topic,“活”着的broker列表,所有partition的leader及ISR等。

    8.启动replicaStateMachine和partitionStateMachine。

    9.将brokerState状态设置为RunningAsController。

    10.将每个partition的Leadership信息发送给所有“活”着的broker。

    11.若auto.leader.rebalance.enable=true(默认值是true),则启动partition-rebalance线程。

    12.若delete.topic.enable=true且Delete Topic Patch(/admin/delete_topics)中有值,则删除相应的Topic。

    昆明Java培训选昆明达内Java培训机构,昆明达内Java培训汇集Java培训行业专家!

    推荐文章

上一篇:kafka知识点:broker保存消息

下一篇:kafka知识点:consumer消费消息

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56