消息中间件面试题

1、RabbitMQ篇

1.1、RabbitMQ如何保证消息不丢失?

1、生产者服务宕机了,导致发送不成功

2、交换机发送不到队列

3、MQ宕机了 导致消息丢失

4、消费者宕机了 没消费到消息

解决第一二个问题,生产者发送消息失败

解决第三个问题,MQ宕机

解决第四个问题,消费端有异常

1.2、RabbitMQ重复消费

看完上面的应该知道,消费者有个确认机制

如果说消费者在向队列发确认ack的时候,由于网络抖动或者消费者挂掉了,导致队列没有收到确认,

过了一会儿网络又好了,队列说我没有收到确认ack,我要再重试一次,这样对于消费者来说就要重复处理消息了

1.3、RabbitMQ死信交换机(延迟队列)

1.4、RabbitMQ如果有100万消息堆积在MQ,如何解决(消息堆积怎么解决)

1.5、RabbitMQ的高可用机制有了解过嘛

1.6、RabbitMQ的核心组件与工作原理

交换机有多种

  • Fanout Exchange

  • Direct Exchange

  • Topic Exchange

  • Header Exchange

1.7、RabbitMQ怎么保证消息不丢失?

先看一下消息的传递流程:

  • 第一步的保证
    • 开启Confirm确认模式
      • 消息未投递成功,采取补偿措施,存进数据库,让定时任务定时扫去补偿,或是记录日志,或是发送通知让负责人知道

没有回调成功,confirm中的ack为false

  • 第二步的保证
    • 开启return返回模式()
      • 消息未投递成功,采取补偿措施,存进数据库,让定时任务定时扫去补偿,或是记录日志,或是发送通知让负责人知道

当消息不能投递到队列,会回调returnedMessage方法

以上两种需要提前实现的接口:

  • 第三步的保证
    • 交换机/队列/消息的持久化
    • 集群高可用部署

队列持久化设置:

交换机持久化:

消息持久化:

  • 第四步的保证
    • 手动确认消息

1.8、RabbitMQ怎么保证幂等?

2、Kafka篇

2.1、Kafka怎么保证消息不丢失?

1、针对第一类,生产者发送消息到Broker消失

2、针对第二类,Broker怎么解决消息不丢失的问题?

发生重平衡的原因是:比如consumer2挂掉了,现在consumer2的任务给了consumer1,如下图

而此时,consumer实际消费到了6,但是只提交到了3,因为是每隔5s提交一次,所以consumer1可能会重复消费到456

原因是因为偏移量是每隔5s自动提交的,现在可以改成手动提交偏移量

2.2、kafka怎么保证消息的顺序消费?

2.3、Kafka的高可用机制?

 

2.4、Kafka的数据清理机制

2.5、Kafka中实现高性能的设计有了解过吗?

为什么顺序读写快?寻址快呗!

零拷贝:

生产者放消息 和 消费者消费消息 在操作系统中的流图

从磁盘文件拷贝到页缓存 第一次拷贝

从页缓存拷贝到kafka 第二次拷贝

从kafka拷贝到Socket缓冲区 第三次拷贝

从Socket缓冲区拷贝到网卡 第四次拷贝

现在kafka知道了哪一个消费者要消费消息,把所有的事情都委托给了操作系统操作,直接从页缓存把数据放进了网卡,这样做,只拷贝两次就行了

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值