MST

星途 面试题库

面试题:消息队列Kafka在实时竞价广告系统中的消息分区策略及作用

在使用Kafka开发实时竞价广告系统时,简述Kafka的消息分区策略有哪些,以及这些分区策略对于系统性能和数据处理有什么关键作用。
32.2万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

Kafka的消息分区策略

  1. Round Robin策略
    • 该策略按顺序将消息轮流发送到各个分区。比如有3个分区P0P1P2,消息M1发送到P0M2发送到P1M3发送到P2M4又发送到P0,以此类推。
  2. Hash策略(默认策略)
    • 对消息的键(Key)进行哈希计算,然后根据哈希值对分区数取模,决定消息发送到哪个分区。例如,有5个分区,消息键的哈希值为12,12 % 5 = 2,则消息发送到分区P2。如果消息没有键,则随机选择一个分区。
  3. Sticky策略
    • 开始时,消息会随机选择一个分区,之后尽量保持在这个分区发送消息,直到这个分区的负载过高或不可用,才会切换到其他分区。

分区策略对系统性能和数据处理的关键作用

  1. 负载均衡
    • Round Robin策略:能均匀地将消息分散到各个分区,避免单个分区负载过高,充分利用集群资源,提高整体系统性能。在实时竞价广告系统中,能让不同的广告请求均匀分布,防止某个分区成为性能瓶颈。
    • Hash策略:对于有相同键的消息,能保证它们发送到同一个分区,这在需要对特定键的数据进行顺序处理或聚合计算时很有用。例如,对于同一广告主的所有竞价请求,通过键(如广告主ID)哈希发送到同一分区,便于后续按广告主维度进行统计分析等操作,同时也在一定程度上实现了负载均衡。
    • Sticky策略:在实现负载均衡的同时,减少了消息在分区间频繁切换带来的开销,提高了数据处理的稳定性和效率。对于实时竞价广告系统中一些对处理连续性要求较高的业务逻辑,如特定广告活动的实时监测,Sticky策略能更好地满足需求。
  2. 数据局部性
    • Hash策略:由于相同键的消息会发送到同一分区,在数据处理时,相关数据能集中在一个或少数几个分区,便于进行本地的数据处理和分析,减少跨分区的数据传输开销,提高处理效率。例如在实时竞价广告系统中,对某个广告的一系列竞价请求和反馈数据,集中在一个分区处理,有利于快速统计该广告的实时效果指标。
    • Sticky策略:同样有助于维持数据局部性,使数据处理更具连续性和高效性,对于需要连续跟踪和处理的数据场景,如广告投放的实时反馈监测,能更好地保障数据处理的及时性和准确性。
  3. 容错性
    • Round Robin策略:如果某个分区出现故障,其他分区仍能正常接收和处理消息,系统整体功能不会完全瘫痪。同时,重新分配消息时,Round Robin策略可以继续均匀分配消息到剩余健康的分区,保证系统的容错和恢复能力。
    • Hash策略:在分区故障时,由于键相同的消息总是发送到同一分区,当该分区故障恢复后,可以更方便地恢复相关数据的处理,保证数据处理的一致性和完整性。在实时竞价广告系统中,对于特定广告主或广告活动的数据恢复,Hash策略能提供较好的支持。
    • Sticky策略:当分区故障恢复后,Sticky策略可以尽量将消息重新路由回原分区,减少对整体数据处理逻辑的影响,有助于提高系统的容错和恢复效率。