面试题答案
一键面试1. 分析不同业务场景对高可用性和性能的需求
- 对数据一致性要求极高且实时性要求相对较低的场景:这类场景如金融交易记录存储。更看重高可用性和数据完整性,可容忍一定性能损耗。
- 对实时性要求极高但数据一致性要求相对没那么严格的场景:例如实时监控数据,需要快速响应,可适当牺牲一定数据一致性以换取性能。
- 兼顾高可用性和高性能的通用场景:大多数互联网业务,如用户行为日志收集等。
2. 保证高可用性同时优化性能的策略及实施步骤
- 优化副本配置
- 策略:根据业务场景调整副本因子。对于数据一致性要求极高的场景,可适当提高副本因子,如设置为 3 - 5;对于实时性要求高场景,可设置为 2 - 3 以减少同步开销。
- 实施步骤:在 Kafka 配置文件(server.properties)中通过
num.replica.fetchers
参数设置副本拉取线程数,合理增加此值可提升副本同步效率;在创建主题时,通过--replication-factor
参数指定副本因子。
- 优化 ISR 机制
- 策略:动态调整 ISR 成员数量。当网络稳定时,放宽 ISR 准入条件,允许更多副本进入 ISR,提高数据冗余度;网络不稳定时,收紧条件,减少不必要的副本同步。
- 实施步骤:通过修改
replica.lag.time.max.ms
参数设置副本与 leader 副本的最大滞后时间,以此动态调整 ISR 成员。
- 生产者端优化
- 策略:批量发送消息,增加消息批次大小,减少网络请求次数。同时,合理设置
acks
参数。对于数据一致性要求高场景,acks=all
;实时性要求高场景,acks=1
。 - 实施步骤:在生产者配置中,通过
batch.size
参数设置批次大小;通过acks
参数设置确认机制。
- 策略:批量发送消息,增加消息批次大小,减少网络请求次数。同时,合理设置
- 消费者端优化
- 策略:采用多线程消费,提高消费并行度。同时,合理设置
fetch.min.bytes
和fetch.max.wait.ms
参数,平衡拉取数据量和等待时间。 - 实施步骤:在消费者代码中,创建多个消费者线程并行消费;在消费者配置中,设置
fetch.min.bytes
和fetch.max.wait.ms
参数。
- 策略:采用多线程消费,提高消费并行度。同时,合理设置
3. 举例
以电商订单记录场景为例,该场景对数据一致性要求高,实时性要求相对低。
- 优化副本配置:设置副本因子为 3,在创建订单主题时指定
--replication-factor 3
。同时,将num.replica.fetchers
设置为 3 以提升副本同步效率。 - 优化 ISR 机制:由于电商系统网络相对稳定,将
replica.lag.time.max.ms
设置为相对较大值,如 5000,让更多副本能留在 ISR 中。 - 生产者端优化:设置
batch.size
为 16384(16KB),acks=all
,确保数据可靠写入。 - 消费者端优化:采用多线程消费订单消息,同时设置
fetch.min.bytes
为 1024(1KB),fetch.max.wait.ms
为 500,以平衡拉取数据量和等待时间。