1.Mysql死锁如何解决

 我的回答:可以通过删除锁来解决死锁

搜索答案:

  Mysql中的死锁是两个或多个事务等待对方释放资源,导致无法正常运行。

  1. 检测死锁:MySQL使用等待图(Wait-for Graph)算法来检测死锁,通过检查事务之间的依赖关系来判断是否存在死锁。
  2. 死锁处理策略:回滚一个或多个事务选择一个事务作为牺牲者超时设置和重试机制
  3. 手动处理死锁:连接数据库---》查看死锁事务---》分析死锁信息,获取事务ID---》使用kill命令终止死锁事务

2.MQ之间的区别

 我的回答:MQ有RabbitMq、RocketMQ以及kafka。RabbitMq在处理大数据时响应速度不如Kafka和RocketMQ,RocketMQ和Kafka适用于处理大数据,且RocketMQ可用用于分布式事务处理,流量削峰。

搜索答案:

  1. RabbitMq具有很好的跨平台功能,支持事务和持久化,但处理大量小数据时性能可能不如Kafka和RocketMQ。
  2. Kafka适用于大数据的处理场景,能够大规模集群部署,持久化能力强,通过顺序读写保证数据的有序性。
  3. RocketMQ适用于大规模分布式系统,提供顺序消息,事务消息,定时/延时等功能,高性能且稳定。社区活跃度不如Kafka

3.消息队列如何保证消息不被重复消费

我的回答:通过消息确认机制,类似三次握手的ACK机制,来确认消息是否到达;另外还可以通过Redis的hasKey方法进行幂等性校验,防止消息重复消费。

搜索答案:消息去重(每条消息唯一ID)、消息确认机制,幂等性,持久化(将消息持久化,即使重读发送,也能保证每条消息被消费一次)

4.消息队列满了怎么解决

  1. 增加消费者数量:水平优化(增加消费者数量)、垂直扩展(提高单个消费者消息处理能力(代码、硬件))、异步处理提高消费者吞吐量
  2. 优化消费生产者:限流(控制生产者消息发送速率)、批处理(将多个小消息合并成大消息,减少消息头开销)、消息持久化(防止队列空间不足进而安全存储消息)
  3. 消息队列系统优化:扩容、分区、消息压缩、消息过期策略(设置消息过期时间,过期自动删除)
  4. 消息处理策略:优先级队列、死信队列(存放无法处理或重复的错误消息)、消息重试机制(处理失败的消息重试而不是丢弃)