当前位置:   article > 正文

kafka的副本以及分区与副本的关系_kafka分区和副本理解

kafka分区和副本理解

一 副本的作用

1.Kafka 副本作用:提高数据可靠性。

2.Kafka 中副本分为:Leader 和 Follower。Kafka 生产者只会把数据发往 Leader, 然后 Follower 找 Leader 进行同步数据。

读写由leader来完成,follower只备份,和leader同步数据,leader发生故障,follower顶上去。

leader副本:可以理解为某个分区中,除了不是副本的那个分区。

3.Kafka 分区中的所有副本统称为 AR(Assigned Repllicas)。

AR = ISR + OSR

4.ISR:表示和 Leader 保持同步的 Follower 集合。如果 Follower 长时间未向 Leader 发送通信请求或同步数据,则该 Follower 将被踢出 ISR。该时间阈值由 replica.lag.time.max.ms参数设定,默认 30s。Leader 发生故障之后,就会从 ISR 中选举新的 Leader。

5.OSR:表示 Follower 与 Leader 副本同步时,超时的副本集合。

二 副本与分区的作用

2.1 案例描述

假设创建4个节点,5个分区,2个副本,那么分区,副本的关系,如下图所示:

  1. root@VM_15_71_centos kafka_2.11-1.0.0]# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test-part
  2. [2019-06-28 01:23:50,646] INFO Accepted socket connection from /127.0.0.1:41204 (org.apache.zookeeper.server.NIOServerCnxnFactory)
  3. [2019-06-28 01:23:50,646] INFO Client attempting to establish new session at /127.0.0.1:41204 (org.apache.zookeeper.server.ZooKeeperServer)
  4. [2019-06-28 01:23:50,649] INFO Established session 0x16b99ec1ce1000c with negotiated timeout 30000 for client /127.0.0.1:41204 (org.apache.zookeeper.server.ZooKeeperServer)
  5. Topic:test-part PartitionCount:5 ReplicationFactor:2 Configs:
  6. Topic: test-part Partition: 0 Leader: 0 Replicas: 0,2 Isr: 0,2
  7. Topic: test-part Partition: 1 Leader: 1 Replicas: 1,3 Isr: 1,3
  8. Topic: test-part Partition: 2 Leader: 2 Replicas: 2,0 Isr: 2,0
  9. Topic: test-part Partition: 3 Leader: 3 Replicas: 3,1 Isr: 3,1
  10. Topic: test-part Partition: 4 Leader: 0 Replicas: 0,3 Isr: 0,3
  11. [2019-06-28 01:23:50,899] INFO Processed session termination for sessionid: 0x16b99ec1ce1000c (org.apache.zookeeper.server.PrepRequestProcessor)
  12. [2019-06-28 01:23:50,904] INFO Closed socket connection for client /127.0.0.1:41204 which had sessionid 0x16b99ec1ce1000c (org.apache.zookeeper.server.NIOServerCnxn)

通过以上信息我们可以分析得出:

1.opic:test-part PartitionCount:5    ReplicationFactor:2 Configs:

一个主题: test-part, 5个分区,2个副本。

2.Partition这一列竖着看,【0,1,2,3,4】共5个分区。

3.Replicas 这一列竖着看,将所有boker的id去重后【[0,2],[1,3],[2,0],[3,1],[0,3]】,得到的集合个数为节点的数目【0,1,2,3】

4.Replicas 这一列,选择任意一行横着看,boker的id的集合大小为,副本的个数,如【0,2】副本数为2。

梳理存储分布图: 

kafka的分区的leader副本选举

3.1 leader选举思想

按照:在 isr中存活为前提,按照 AR中排在前面的优先顺序,比如

选举规则:在 isr 中存活为前提,按 照AR中排在前面的优先。例如 ar[1,0,2], isr [1, 0 2] ,那么 leader 就会按照1 0 2 的顺序轮询。
1. 创建一个新的 topic 4 个分区, 4 个副本

2.查看 Leader 分布情况

 3.停止掉 hadoop105 kafka 进程,并查看 Leader 分区情况

 可以看到按照AR中的顺序,3021中3挂掉,0成为主节点。

 四 leader与follower发生故障处理

 4.1 follower发生故障

1.LEO和HW

LEO Log End Offset ): 每个副本的最后一个 offset LEO 其实就是最新的 offset+ 1
HW High Watermark ): 所有副本中最小的 LEO

2.流程

1.Follower发生故障后会被临时踢出ISR

2.这个期间Leader和Follower继续接收数据(不管follower是否还能接收到,二者还是在通信同步数据)

3.待该Follower恢复后,Follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向Leader进行同步。

4.等该Follower的LEO大于等于该Partition的HW,即Follower追上Leader之后,就可以重新加入ISR了。

  4.2 leader发生故障

1.LEO和HW

LEO Log End Offset ): 每个副本的最后一个 offset LEO 其实就是最新的 offset+ 1
HW High Watermark ): 所有副本中最小的 LEO

2.流程

  五  手动调试分区副本存储

  5.1 需求描述 

 5.2  操作步骤

1.创建一个新的 topic ,名称为 three

2.查看分区副本存储情况。

3. 创建副本存储计划(所有副本都指定存储在 broker0broker1 中)。

 4.执行副本存储计划。

5.验证副本存储计划。

 6.查看分区副本存储情况

   六  生产经验——Leader Partition 负载平衡(了解)

正常情况下, Kafka 本身会自动把 Leader Partition 均匀分散在各个机器上 ,来保证每台机器的读写吞吐量都是均匀的。但是如果 某些broker 宕机 会导致 Leader Partition 过于集中在其他少部分几台 broker ,这会导致少数几台 broker 的读写请求压力过高,其他宕机的 broker重启之后都是 follower partition ,读写请求很低, 造成集群负载不均衡。 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/362006
推荐阅读
相关标签
  

闽ICP备14008679号