面试题答案
一键面试Topic分区数量
- 基于吞吐量预估:分析每个环节每秒产生的消息量以及 Kafka 单个分区的处理能力。例如,如果订单创建环节每秒产生1000条消息,而单个分区每秒能处理100条消息,那么订单创建对应的 Topic 至少需要10个分区。随着业务增长,若消息量翻倍,可适当增加分区数量,以提升整体吞吐量。
- 考虑负载均衡:为避免部分分区负载过高,部分分区空闲的情况,按照业务操作的类型或用户ID等维度进行均匀分区。比如按用户ID的哈希值对订单创建 Topic 进行分区,使得不同用户的订单消息均匀分布在各个分区,防止某些热门用户的订单消息集中在少数分区。
副本因子设置
- 高可靠性场景:对于支付环节,因其涉及资金安全,对可靠性要求极高,可设置副本因子为3或更高。这样即使有2个副本所在的 Broker 节点出现故障,数据依然可从剩余副本获取,保证支付消息不丢失。
- 成本与可靠性平衡:对于物流环节,虽然也需要一定可靠性,但相对支付环节要求稍低,可设置副本因子为2。既能在一定程度上保证数据可靠性,又不会过多占用 Broker 资源。当系统资源紧张时,可适当降低非关键环节 Topic 的副本因子;而在业务高峰期或对数据可靠性要求提升时,适当增加副本因子。
消息分区策略
- 按业务类型分区:订单创建、支付、物流等不同业务环节分别使用不同的 Topic,在每个 Topic 内,根据业务操作进一步分区。例如在订单创建 Topic 中,按订单来源(PC端、移动端等)进行分区,便于针对不同来源的订单进行独立处理和监控。
- 一致性哈希分区:对于需要保证相同业务实体消息顺序的场景,如同一订单的支付、物流消息,采用一致性哈希分区策略。以订单ID为哈希键,确保同一订单的所有消息都发送到同一个分区,保证消息顺序性。当新增或减少分区时,一致性哈希能尽量减少数据迁移,保证系统稳定性。
动态调整策略
- 监控指标驱动:实时监控 Kafka 的指标,如分区的负载、副本的同步状态等。当某个分区的负载持续超过阈值(如 CPU 使用率超过80%),可考虑增加分区;若某个副本长时间处于同步滞后状态,可适当增加副本因子或检查网络、磁盘等硬件问题。
- 业务流量变化:在电商促销活动等业务流量高峰期,提前预估消息量增长,增加相关 Topic 的分区数量和副本因子。活动结束后,根据实际业务量减少资源配置,降低成本。
- 业务变更响应:如果业务流程发生变化,如新增了一种支付方式,需要对支付 Topic 的分区策略进行调整,确保新支付方式的消息能合理分布和处理。