面试题答案
一键面试金融交易类业务
策略
- 优先保证数据一致性:采用较为保守的处理策略,确保每一条交易消息都被准确处理,不丢失、不重复。
- 适度降低高可用性:在一定程度上牺牲系统的部分可用性,以满足数据一致性的严格要求。
原因
金融交易涉及资金的变动,数据的准确性和一致性至关重要。哪怕是微小的错误都可能导致严重的财务损失和信任危机。相比之下,系统短暂的不可用在可接受范围内,因为交易的稳定性和正确性是首要目标。
技术实现思路
- 增加副本数量:为Kafka主题设置较多的副本数,确保数据的冗余存储,提高数据的可靠性。例如,将副本数设置为3或更多,这样即使部分副本出现故障,数据仍然可以从其他副本获取。
- 同步复制:采用同步复制机制,生产者在发送消息时,需要等待所有同步副本都确认收到消息后才认为消息发送成功。这保证了数据在多个副本之间的一致性,但会降低系统的吞吐量和响应速度。
- 限流:在消费者端进行限流处理,根据系统的处理能力,合理控制消费速度,避免因消费过快导致处理错误,确保每笔交易都能被正确处理。例如,通过设置令牌桶算法来限制每秒处理的消息数量。
日志收集类业务
策略
- 优先保证系统高可用性:确保日志收集系统能够持续稳定运行,尽可能减少数据丢失的可能性。
- 在一定程度上放宽数据一致性要求:由于日志数据主要用于分析和故障排查,少量的数据丢失或重复在大多数情况下不会对业务造成严重影响。
原因
日志收集的主要目的是为了记录系统运行状态和事件,以便后续的分析和故障排查。系统的高可用性对于及时收集和记录日志至关重要,因为一旦系统出现故障导致日志收集中断,可能会丢失关键信息。而少量的日志数据重复或丢失,通常不会对整体的分析和排查工作产生实质性的影响。
技术实现思路
- 异步复制:采用异步复制机制,生产者发送消息后不需要等待所有副本确认,就可以继续发送下一条消息,这样可以提高系统的吞吐量和响应速度。虽然可能会存在短暂的数据不一致,但在日志收集场景下是可以接受的。
- 自动故障转移:利用Kafka的自动故障转移机制,当某个副本出现故障时,系统能够快速将其从ISR(In - Sync Replicas)列表中移除,并选举新的副本作为领导者,确保系统的高可用性。
- 批量处理:在消费者端采用批量处理的方式,一次性处理多个日志消息,提高消费效率。同时,可以设置合理的重试机制,对于处理失败的消息进行重试,但不会因为个别消息处理失败而阻塞整个处理流程。例如,设置最大重试次数为3次,如果3次重试后仍然失败,则记录错误日志并继续处理下一批消息。