1,幂等
幂等在接口、消息队列 和防抖中都有见到,所以也是经常被问到的
- 最长用、也是最通用的方法就是给消息加个唯一标识,然后在消费端 加上业务判断,到缓存或者数据库中查询是否已经存在这个标识,存在说明已经消费过了,就跳过。否则就消费,并保存到缓存或数据库中。
- 然后就是值针对于数据库的,可以加乐观锁 version冗余字段,适用于更新操作,但是要记得把version自动也要从接口穿过来,这样才能标识是同一个操作。
- 还是也是针对数据库的,就是唯一主键限制.但是这个限制更多,主键需要接口传过来,且只适用于插入和删除操作。这样就能在重复操作时,直接报数据已存在。
2,kafka
- 快的原因:零拷贝、顺序读取、批量操作、并行操作
- 重复消费:消费端:加幂等。生产端:通过配置
enable.idempotence
属性为true
,来设置幂等性 - 消息丢失: 生产端:所有副本都同步消息完成了才算发送成功。消费端:手动提交
- 有序消费:放到一个partition中,指定一个消费者消费。
3,mysql 主从复制
主负责写,