面试题答案
一键面试常见 Kafka 分区策略
- 轮询(Round Robin)策略
- 原理:按照顺序依次将消息发送到各个分区。例如,有 3 个分区,第一条消息发往分区 0,第二条发往分区 1,第三条发往分区 2,第四条又发往分区 0,以此类推。
- 特点:能均匀地将消息分布到各个分区,实现负载均衡。但如果消息本身有一些特性(如业务相关性),轮询策略可能导致相关消息分散在不同分区,不利于后续处理。
- 随机(Random)策略
- 原理:随机地将消息发送到各个分区。每次选择分区时,都从所有可用分区中随机挑选一个。
- 特点:实现简单,也能在一定程度上实现负载均衡。不过相比轮询策略,随机策略可能导致某些分区消息分布不均匀的概率更高。
- 按消息键(Key - Hash)策略
- 原理:根据消息的键(Key)计算哈希值,然后对分区数取模,根据模值决定消息发往哪个分区。例如,有 3 个分区,键的哈希值为 5,5 % 3 = 2,则消息发往分区 2。
- 特点:能保证具有相同键的消息始终发送到同一个分区,对于需要将相关消息聚合到一起处理的场景非常有用。
在游戏运营数据统计场景下的分区策略选择及原因
- 选择按消息键(Key - Hash)策略
- 原因:游戏运营数据通常具有很强的关联性。比如,统计某个玩家的游戏登录次数、游戏时长等数据,这些数据围绕特定玩家展开。以玩家 ID 作为消息的键,使用按消息键(Key - Hash)策略,可以确保与同一玩家相关的所有运营数据都发送到同一个分区。这样在后续数据处理阶段,无论是进行实时统计还是批量处理,都可以方便地在一个分区内获取到完整的玩家相关数据,避免了跨分区的数据检索和合并操作,大大提高了数据处理的效率和准确性。同时,按消息键(Key - Hash)策略也能在一定程度上实现负载均衡,只要玩家 ID 分布足够随机,各个分区的负载就会相对均匀。