• Kafka消费者Relance机制和分区机制


    Kafka消费者Relance机制和分区机制

    kafka消费者Relance

    rebalance就是说如果消费组里的消费者数量有变化或消费的分区数有变化,
    kafka会重新分配消费者消费分区的关系。比如consumer group中某个消费者挂了,此时会自动把分配给他的分区交给其他的消费者,如果他又重启了,那么又会把一些分区重新交还给他。
    
    • 1
    • 2

    注意:rebalance只针对subscribe这种不指定分区消费的情况,如果通过assign这种消费方式指定了分区,kafka不会进行rebanlance。
    如下情况可能会触发消费者rebalance

    1. 消费组里的consumer增加或减少了
    2. 动态给topic增加了分区
    3. 消费组订阅了更多的topic
    
    • 1
    • 2
    • 3

    rebalance过程中,消费者无法从kafka消费消息,这对kafka的TPS会有影响,如果kafka集群内节点较多,比如数百个,那重平衡可能会耗时极多,所以应尽量避免在系统高峰期的重平衡发生

    消费者Rebalance分区分配策略

    主要有三种rebalance的策略:range、round-robin、sticky。
    Kafka 提供了消费者客户端参数partition.assignment.strategy 来设置消费者与订阅主题之间的分区分配策略。默认情况为range分配策略。

    .假设一个主题有10个分区(0-9),现在有三个consumer消费:range策略就是按照分区序号排序,假设 n=分区数/消费者数量 = 3, m=分区数%消费者数量 = 1,那么前 m 个消费者每个分配 n+1 个分区,后面的(消费者数量-m )个消费者每个分配 n 个分区。比如分区03给一个consumer,分区46给一个consumer,分区7~9给一个consumer。

    round-robin策略就是轮询分配,比如分区0、3、6、9给一个consumer,分区1、4、7给一个consumer,分区2、5、8给一个consumer
    
    • 1
    sticky策略初始时分配策略与round-robin类似,但是在rebalance的时候,需要保证如下两个原则。
    1)分区的分配要尽可能均匀 。
    2)分区的分配尽可能与上次分配的保持相同。
    
    • 1
    • 2
    • 3

    当两者发生冲突时,第一个目标优先于第二个目标 。这样可以最大程度维持原来的分区分配的策略。

    比如对于第一种range情况的分配,如果第三个consumer挂了,那么重新用sticky策略分配的结果如下:
    consumer1除了原有的0~3,会再分配一个7
    consumer2除了原有的4~6,会再分配8和9

  • 相关阅读:
    MySQL事务管理
    Tomcat设置IP黑名单和白名单server.xml
    如何熟练使用vim工具?
    activiti默认模型ER图
    在Git上,提交记录有误,修改commit方法
    python 实例002 - 数据转换
    js:如何使用JavaScript函数小作业
    海关 瑞数5.5 找后缀加密入口解析
    MongoDB单实例安装(Linux)
    穿透三翼鸟“三不卖”原则:看似“逆向”背后的十足远见
  • 原文地址:https://blog.csdn.net/huanglu0314/article/details/125524735