首页 文章

“重新 balancer ”在Apache Kafka上下文中意味着什么?

提问于
浏览
34

我是Kafka的新用户,现在已经试用了大约2-3周 . 我相信目前我已经很好地理解了Kafka在大多数情况下的工作方式,但是在尝试为我自己的Kafka消费者设计API之后(这是模糊的,但我遵循了新的KafkaConsumer的指导方针,应该是可用于v 0.9,它出现在'trunk'repo atm上)如果我有多个具有相同groupID的消费者,我就会从主题中消耗延迟问题 .

在此设置中,我的控制台始终记录有关“重新 balancer 触发”的问题 . 当我向消费者群体添加新的消费者时,是否会发生重新 balancer ,并且为了找出同一个群组ID中的哪个消费者实例将获得哪些分区或完全用于其他内容的重新 balancer 而触发它们?

我也从https://cwiki.apache.org/confluence/display/KAFKA/Kafka+0.9+Consumer+Rewrite+Design看到了这段话,我似乎无法理解它,所以如果有人能帮助我理解它,那将非常感激:

重新 balancer 是一组消费者实例(属于同一组)协调以拥有该组订阅的互斥主题分区集的过程 . 在成功完成消费者组的重新 balancer 操作结束时,所有订阅主题的每个分区都将由该组中的单个消费者实例拥有 . 重新 balancer 的工作方式如下 . 每个经纪人都被选为消费者群体子集的协调者 . 组的协调代理负责协调有关订阅主题的使用者组成员身份更改或分区更改的重新 balancer 操作 . 它还负责将生成的分区所有权配置传递给正在进行重新 balancer 操作的组的所有使用者 .

2 回答

  • 25

    当新的消费者加入消费者群体时,该组消费者尝试“重新 balancer ”负载以将分区分配给每个消费者 . 如果在进行此分配时消费者集合发生更改,则重新 balancer 将失败并重试 . 此设置控制放弃前的最大尝试次数 .

    对此的命令是:rebalance.max.retries,默认设置为4 .

    此外,如果以下情况属实,可能会发生这种情况:

    ZooKeeper会话超时 . 如果消费者在这段时间内没有心跳到ZooKeeper,那么它被认为已经死亡并且将发生重新 balancer .

    希望这可以帮助!

  • 38

    消费者组中的每个消费者都被分配一个或多个主题分区,而Rebalance是消费者之间的分区所有权的重新分配 .

    重新 balancer 发生在:

    • 消费者加入该组

    • 消费者干净利落地走下去

    • 群体协调员认为消费者是DEAD . 这可能发生在崩溃之后或消费者忙于长时间运行的处理时,这意味着消费者在配置的会话间隔内没有同时向组协调器发送心跳
      添加了

    • 个新分区

    作为集团协调员(集群中的经纪人之一)和集团领导者(加入集团的第一个消费者),为消费者群体指定,Rebalance可以或多或少地描述如下:

    • 领导者从组协调器接收组中所有消费者的列表(这将包括最近发送心跳并且因此被认为是活动的所有消费者)并且负责为每个消费者分配分区的子集 .

    • 在决定分区分配(Kafka有几个内置分区分配策略)后,组长将分配列表发送给组协调器,组协调器将此信息发送给所有使用者 .

    这适用于Kafka 0.9,但我很确定新版本仍然有效 .

相关问题