kafka生产者和消费者的分区分配策略

引言
我们都知道在kafka中producer向topic推送消息,而consumer是主动去拉取消息。而在topic中存在着分区和分片,那么kafka生产者和消费者应该采用什么样的分区分配策略呢

一、producer的分区分配策略

我们向topic发送消息的时候是要把messages封装成一个ProducerRecord对象的,源码如下:
在这里插入图片描述
(1)可以看到后面4种是需要我们自己指定分区的,所以可以直接将消息发送到指定分区
(2)第二行需要我们指定一个key,这种是将key的hash值与topic的partition数求余得到分区值,是不知道会发往哪一个分区的
(3)而第一行是你既没有指定partition又没有指定key的值,第一次调用时会随机生成一个整数(后面每次调用在这个整数上自增),将这个值与topic的 partition数取余得到partition值,也就是常说的 round-robin 算法,这也是默认的分区分配策略,能够保证负载均衡

这里我只测试一下常见的第3种分区分配策略:
1、我们先创建一个有3个分区的topic
在这里插入图片描述
2、我们向这个topic发送8条消息
在这里插入图片描述

3、那么如果我们只启动一个consumer,是不是这3个分区都只能它一个人来消费,因为kafka每一个分区内的数据是顺序的,同时这一个消费者是一个分区一个分区里面的数据来消费(如果你消费了第一个分区的一条数据又去消费第二个分区的一条数据这样IO是不是很大),那么按照轮训的策略,是不是一个分区的数据是1、4、7,一个分区的数据是2、5、8,还有一个分区的数据是3、6。那么如果它是轮训的,先消费哪一个分区的数据不重要,但是147和258和36肯定是一起消费的。
在这里插入图片描述
结果是不是完全符合我们的猜想

二、consumer的分区分配策略

我们都知道consumer是以consumer group的名义订阅topic,而topic中有多个partition,consumer group中又有多个consumer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值