kafka的分区(partion)和消费者(consumer)

分区(partion)

kafka中的topic可以细分为不同的partion,一个topic可以将消息存放在不同的partion中。

leader和follower

每个partion可以设置一个leader和多个follower。kafka的消息没有设置读写分离,每个消息发送时,都是发送至对应的partion的leader-paertion,follower-partion主要是为了备份数据而存在,当leader-partion出现故障时,数据已经完全同步的follower-partion也会切换成leader-partion。

AR和ISR

AR:分区中所有的副本统称为AR。
ISR:所有与leader节点保持同步的副本(包括leader节点)组成的节点,生产者首先将消息发送给leader副本,然后follower从leader中同步消息。
ISR是AR的子集。

数据的存储

在partion中,一个topic中的数据存放在不同的partion中,一个分区的内容会存储成一个log文件,为了防止log过大,引入了日志分段,根据一定规则将log切分为多个logSegment,相当于一个巨型文件被切分成了很多不同的文件。log和logSegment关系如下:
在这里插入图片描述

Log在物理上只以文件夹的形式存储,日志文件在磁盘的存储如下:
在这里插入图片描述

消费者(consumer)

分组(group)

消费者从partion中消费数据,consumer有group的概念,每个group可以消费完整的一份topic中的数据。

消费者分区分配

RangeAssignor 分配策略(kafka默认的分区策略)

kafka中,consumer消费数据时,consumer消费partion中的数据和consumer与partion的相对数量有关。

  1. partion大于consumer
    当partion大于consumer时,一个consumer可能同时消费多个partion中的数据
    在这里插入图片描述
  2. partion小于consumer
    当partion小于consumer时,每个consumer会去消费一个partion中的数据。多出来的consumer则是处于空闲状态
    在这里插入图片描述
  3. partion等于consume
    当partion的数量等于consumer时,每个consumer消费一个partion中的数据。

除了这种分区分配策略之外,还有RoundRobinAssignor以及StickyAssignor分区分配策略,当然,也可以自定义分区分配策略。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值