2.Kafka 高级
2.1. 分区和副本机制
2.1.1 分区写入策略
生产者可以写入消息到同批次中,Kafka将会根据不同的策略分配到不同的分区中。
分区策略主要3种:
-
轮询分区策略
-
这是一种默认的策略,也是采用最多的策略。它可以最大限度保证所有的消息平均分配到一个分区中。
-
当生产者生产消息时,将key设置为 null, 则认为使用轮询算法均匀地分配分区。
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKkRTPXS-1604475558866)(…/…/AppData/Roaming/Typora/typora-user-images/image-20201101143240188.png)]
-
随机分区策略
每次都将消息随机分配到不同的分区中,在较早的版本这,这是默认的分配策略。
-
按key分区分配策略
按key分配策略,可能会出现 数据倾斜 。 例如:某个key包含了大量的数据,因为 key 值一样,所有的数据将分配到一个分区中,造成该分区的消息数量远大于其它的分区。
这种方式类似于 HashMap 的思想,对key进行hashcode运算,得到的结果再进行取余,然后分配到不同的分区中。
2.1.2 Kafka 如何保证消息的消费顺序有序性?
轮询策略、随机策略都会导致一个问题,生产者生产到Kaf