kafka -- 分区是怎么指定的
在构建ProducerRecord的时候说过,ProducerRecord除了topic和value外,还有两个可选的,包括partition和key。在拉取到元数据后,我们就开始根据分区来对这条消息进行发送。
指定分区
指定分区,就是指 构建ProducerRecord的时候,topic为topic1的ProducerRecord指定partition为1,假定broker此时有3个,分别为broker0、broker1、broker2,那这个消息将会发送给broker1。
文章图片
没有key
如果没有指定分区的时候,就会根据分区器进行分区的计算,我们这里直接用默认的分区器进行分区,所以又分为指定key和没有key的情况。
如果没有指定key的时候,这里也有两种情况:
- topic1对应可用的分区数大于0,那根据topic1对应可用的分区数进行轮询。
- topic1对应可用的分区数等于0,此时根据topic1对应的分区数进行轮询。
【kafka -- 分区是怎么指定的】
文章图片
指定key 如果指定了key,那kafka就会通过murmur2算法,对key的值进行进行,比如key为a的时候,计算的值为32,这个32会对broker的数量3进行取模,得到的余数为2,此时就会发送给broker2。
这里需要注意的是,这个key已经是序列化后的key。
文章图片
推荐阅读
- 热闹中的孤独
- 我要做大厨
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 爱就是希望你好好活着
- 太平之莲
- 知识
- 叙述作文
- 时间老了
- 清明,是追思、是传承、是感恩。
- 我错了,余生不再打扰