kafka之七 分区

分区

副本机制在这里插入图片描述

  • 由于Producer和Consumer都只会和Leader角色的分区副本相连,所以kafka需要以集群的
    组织形式提供主题下的消息高可用,kafka支持主备复制,所以消息具备高可用和持久性
  • 一个分区可以有多个副本,保存在不同的broker上,每个分区的副本中都有一个作为leader,当一个broker
    失败时,leader在这台broker上的分区都会变得不可用,kafka会自动移除leader,再其他副本中选一个作为新的leader
  • 在通常情况下,增加分区可以提供kafka集群的吞吐量,但是分区数过多也有不可用和延迟的风险

分区Leader选举

  • 如果分区leader挂了,follower会选举一个新的leader出来,选举方式时
    在Zookeeper上针对每个Topic维护一个ISR的集合,显然还有一些副本没有来得及同步,只有这个ISR列表
    里面才有资格成蔚leader,优先使用ISR的第一个,如果topic有f+1副本,最多可以f个不可用

分区重新分配

  • 添加kafka节点,只需要复制相应的配置文件,吧里面的broker.id修改全局唯一,最后启动节点即可
  • 把部分分区移到新添加的kafka节点上,kafka内部提供了相关的工具来和重新发布某个topic的分区
    • 借助kafka-ressign-partitions.sh工具生成reassign.plan,先定义文件,说明那些topic需要重新分区

    cat reassign.json
    {“topics”:[{“topic”:“topicName”}],
    “version”:1
    }

    • 然后使用kafka-reassign-partitions.sh生成reassign plan
      • generate:表示指定类型参数
        -topic-to-move-json-file 指定分区重分配对应的主题清单路径

    bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --topics-to-move-json-file
    reassign.json --broker-list “0,1,2,3(分区)” --generate

    • 此时出现两个json字符串,第一个是当前分区副本分配情况,第二个是重新分配的候选方案,还没执行
    • 将第二个json内存保存到result.json文件里面,然后执行reassign plan
    • 执行分配策略

      bin/kafka-reassign-partition.sh --zookeeper localhost:2181 --reassignment-json-file result.json --execute

    • 查看分区重新分配的进度

      bin/kafka-reassign-partition.sh --zookeeper localhost:2181 --reassignment-json-file result.json --verfy

分区分配策略

  • RangeAssignor分配策略
    • 原理是按照消费者总数和分区总数进行整除运算来获得一个跨度,然后将分区按照跨度进行平均分配,保证分区尽可能
      均匀分配给所有的消费者,
    • 按照消费者的名称的字典进行排序,然后每个消费者划分固定的分区范围,
      如果不够平均分配,字典序开钱的消费者会被多分配一个分区
    • 也就是说如果名字取的不好,容易堆积到最前面的消费者那里
  • RoundRobinAssignor
    • 将消费组里面所有的消费者和消费者订阅的所有topic的partition按照字典序排序,
      然后轮询逐个将分区分配给每个消费者
    • 但是每个分区里面的消息时不相同的,因为是轮询所以也有可能存在消费者过载的情况
  • StickyAssignor分配策略
    • 目的1:分区的分配尽可能的均匀
    • 目的2:分区的分配尽可能和上次分配的保持相同
  • 自定义分配策略
    • 需要实现PartitionAssignor接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值