Kafka-Consumer -- 分区消费策略

Kafka-Consumer -- 分区消费策略

前言

    本文主要对 consumer 端对partition的分配策略进行分析。
    kafka 分区分配的规则是 一个分区只能被一个消费者组的某个消费者进行消费。 并且kafka会在此规则下实现消费数据的负载均衡。
    kafka 提供的分区策略有三种,分别是 Range、RoundRobin和Sticky,其中默认策略为Range。

Range

    Range策略首先会对一个Topic下的所有分区进行排序,之后确认当前消费组共有多少个消费者并进行排序,然后用分区数除以消费者数得到每个消费者所消费的分区数目,如果除不尽,那么排序靠前的几个消费者将会多消费一个分区的数据,之后根据消费者消费的分区数目从第一个分区开始分配。
    我们假设 Topic1 存在 5 个分区 p0、p1、p2、p3和p4,某个消费组Group1存在 2 个消费者 c0和c1。按照上述过程,首先确定了每个消费者消费2个分区,但是发现除不尽,所以靠前c0将会多消费一个分区,所以c0将会消费3个分区,c1消费2个分区。然后从第一个分区开始分配,分配结果为 c0:p0、p1、p2;c1:p3、p4,如下图:
Range分配结果

RoundRobin

    RoundRobin是一种轮询的概念,kafka首先会对一个Topic下的所有分区进行排序,同时也会对当前消费者下的所有消费者进行排序,之后进行一对一的分配,也就是第一个分区对应第一个消费者,依次类推,当消费者分配一遍之后,再将剩余的分区从第一个消费者开始分配,直至所有分区分配完成。
    我们假设和Range中的数据一致,按照上述过程,p0–>c0,p1–>c1,p2–>c0,p3–>c1,p4–>c0,如下图:
RoundRobin分配结果

Sticky

    Sticky分配策略,这种分配策略是在kafka的0.11.X版本才开始引入的,是目前最复杂也是最优秀的分配策略。
    Sticky分配策略的原理比较复杂,它的设计主要实现了两个目的:

  • 分区的分配要尽可能的均匀;
  • 分区的分配尽可能的与上次分配的保持相同。

详细的分析可见:https://blog.csdn.net/qq_26803795/article/details/105562691

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值