面试题答案
一键面试轮询策略(Round Robin)
- 策略描述:按照顺序依次将消息发送到每个分区。例如,有3个分区P0、P1、P2,第一条消息发送到P0,第二条到P1,第三条到P2,第四条又回到P0,依此类推。
- 适用场景:适用于数据均匀分布,对数据顺序无特殊要求,希望数据能平均分配到各个分区以充分利用集群资源的场景。比如,日志收集系统,我们只关心将日志数据均匀地存储到各个分区,并不在意具体某条日志存储在哪个分区。
随机策略(Random)
- 策略描述:随机地将消息发送到任意一个分区。每次选择分区时,都从所有可用分区中随机挑选。
- 适用场景:同样适用于对数据分布均匀性有要求,但对消息顺序和特定分区无依赖的场景。例如,一些简单的实时数据采集,数据量较大且对每条数据的处理相对独立,不需要考虑特定顺序,使用随机策略可快速将数据分散到各个分区。
按消息键分区策略(Hash-based)
- 策略描述:根据消息的键(Key)计算哈希值,再根据哈希值对分区数量取模,得到对应的分区编号,然后将消息发送到该分区。例如,消息键为"user123",计算其哈希值为12345,若分区数量为5,则12345 % 5 = 0,消息就会被发送到分区0。
- 适用场景:适用于需要保证具有相同键的消息被发送到同一个分区的场景。比如,用户行为分析系统,我们希望同一个用户的所有行为数据都在同一个分区,这样在处理数据时可以方便地获取该用户的完整行为轨迹,便于分析。
自定义分区策略
- 策略描述:用户根据自身业务逻辑实现
Partitioner
接口来自定义分区策略。可以结合消息内容、系统状态等多种因素来决定消息发送到哪个分区。 - 适用场景:当上述标准策略都无法满足业务需求时,就需要自定义分区策略。例如,在电商系统中,根据订单金额大小进行分区,金额大的订单发送到特定的几个分区以便特殊处理,而金额小的订单发送到其他分区。