一、分区和副本机制:
1. 生产者分区写入策略:
1.1 轮训分配策略:1.2 随机策略(不用):1.3 按key分配策略:1.4 乱序问题:1.5 自动以分区策略: 2. 消费者组Rebalance机制:
2.1 Rebalance 再平衡:2.2 rebalance的不良影响: 3. 消费者分区消费策略:
3.1 Range范围分配策略:
一、分区和副本机制: 1. 生产者分区写入策略:生产者写入消息到topic, kafak将依据不同的策略将数据分配到不同的分区中:
轮训分区策略;随机分区策略;按key分区分配策略;自定义分区策略; 1.1 轮训分配策略:
默认的策略, 也是使用最多的策略, 可以最大限度的保证所有消息平均分配到一个分区;如果在生产消息时, key为null, 则使用轮训算法均衡的分配分区; 1.2 随机策略(不用):
随机策略, 每次都随机地将消息分配到每个分区; 在较早的版本, 默认的分区策略师随机策略; 也是为了将消息均衡的写入每个分区; 但后续轮训策略表现更加, 所以基本上很少使用随机策略;
按key分配策略, 有可能出现 数据倾斜; 例如: 某个key包含大量的数据, 因为key值一样, 所以, 所有的数据都将分配到一个分区中, 造成改分区的消息数量远大于其他分区;
轮训策略, 随机策略都会产生一个问题, 生产到kafka中的数据是乱序存储的, 而按key分区可以在一定程度上实现数据有序存储–也就是局部有序, 但这又可能导致数据倾斜, 所以在实际生产环境中要结合实际情况来取舍; 即: kafka中的消息是全局乱序, 局部partition是有序的; 如果要实现消息总是有序的, 可以将连续的消息放到一个partition, 但kafka失去了分布式的意义;
1.5 自动以分区策略:
实现步骤:
创建自定义分区器;在kafka生产者中, 自定的使用自定义分区器; 2. 消费者组Rebalance机制: 2.1 Rebalance 再平衡:
kafka中rebalance称之为"再平衡’, 是kafka中确保Consumer Group下所有的consumer如何达成一致, 分配订阅的topic的每个分区的机制;
Rebalance触发时机有:
消费者组中consumer的个数发生变化; 例如: 有新的消费者加入, 或者是某个consumer停止;
订阅的topic个数发生变化:
消费者可以订阅多个主题, 假设当前的消费者组订阅了三个topic, 但又一个topic突然被删除了, 此时需要再平衡;
订阅的topic分区数发生变化
2.2 rebalance的不良影响:
发生rebalance时, consumer group下的所有consumer都会协调在一起共同参与, kafka使用分配策略尽可能达到公平分配;rebalance过程会对consumer group产生非常严重的影响, rebalance的过程中所有的consumer都将停止工作, 直到rebalance完成; 3. 消费者分区消费策略: 3.1 Range范围分配策略:
Range范围分配策略是kafka默认的分配策略, 它可以确保每个消费者消费的分区数量是均衡的;



