消息中间件面试题及答案

本文详细介绍了RabbitMQ与Kafka的消息中间件面试问题,涵盖Broker、node类型、queue限制、channel、exchange与queue的作用、vhost、cluster运作、消息持久化、Kafka体系结构、consumer行为、消息存储设计、事务定义、消息队列使用场景、优缺点及解决重复消费的方法,深入探讨了消息的可靠性传输与顺序性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


前    言
本文仅收录了一些常见的消息中间件面试题,如需查看其它java面试题可查看我另一篇博文:

JAVA | 2021最全Java面试题及答案汇总


正    文

1. RabbitMQ 中的 broker 是指什么?cluster 又是 指什么?

答:broker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ
应用程序。cluster 是在 broker 的基础之上,增加了 node 之间共享元数据的约束。

2. RabbitMQ 中 RAM node 和 disk node 的区别?

答:RAM node 仅将 fabric(即 queue、exchange 和 binding等 RabbitMQ基础构件)
相关元数据保存到内存中,但 disk node 会在内存和磁盘中均进行存储。RAM node 上唯一
会存储到磁盘上的元数据是 cluster 中使用的 disk node 的地址。要求在 RabbitMQ
cluster 中至少存在一个 disk node 。

3. RabbitMQ 上的一个 queue 中存放的 message 是 否有数量限制?

答:可以认为是无限制,因为限制取决于机器的内存,但是消息过多会导致处理效率的
下降。

4. RabbitMQ 概念里的 channel、exchange 和 queue 这些东东是逻辑概念,还是对应着进程实体?它们 分别起什么作用?

答:queue 具有自己的 erlang 进程;exchange 内部实现为保存 binding 关系的查找
表;channel 是实际进行路由工作的实体,即负责按照 routing_key 将 message 投递给
queue 。由 AMQP 协议描述可知,channel 是真实 TCP 连接之上的虚拟连接,所有 AMQP 命
令都是通过 channel 发送的,且每一个 channel 有唯一的 ID。一个 channel 只能被单独
一个操作系统线程使用,故投递到特定 channel 上的 message 是有顺序的。但一个操作系
统线程上允许使用多个 channel 。channel 号为 0 的 channel 用于处理所有对于当前
connection 全局有效的帧,而 1-65535 号 channel 用于处理和特定 channel 相关的帧。
AMQP 协议给出的 channel 复用模型如下
其中每一个 channel 运行在一个独立的线程上,多线程共享同一个 socket。

5. RabbitMQ 中 vhost 是什么?起什么作用?

答:vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立
的 queue、exchange 和 binding 等,但最最重要的是,其拥有独立的权限系统,可以做到
vhost 范围的用户控制。当然,从 RabbitMQ 的全局角度,vhost 可以作为不同权限隔离的
手段(一个典型的例子就是不同的应用可以跑在不同的 vhost 中)。

6.在单 node 系统和多 node 构成的 cluster 系统 中声明 queue、exchange ,以及进行 binding 会 有什么不同?

答:当你在单 node 上声明 queue 时,只要该 node 上相关元数据进行了变更,你就
会得到 Queue.Declare-ok 回应;而在 cluster 上声明 queue ,则要求 cluster 上的全
部 node 都要进行元数据成功更新,才会得到 Queue.Declare-ok 回应。另外,若 node 类
型为 RAM node 则变更的数据仅保存在内存中,若类型为 disk node 则还要变更保存在磁
盘上的数据。

7.客户端连接到 cluster 中的任意 node 上是否都 能正常工作?

答:是的。客户端感觉不到有何不同。

8.能够在地理上分开的不同数据中心使用 RabbitMQ cluster 么?

答:不能。第一,你无法控制所创建的 queue 实际分布在 cluster 里的哪个 node 上
(一般使用 HAProxy + cluster 模型时都是这样),这可能会导致各种跨地域访问时的常
见问题;第二,Erlang 的 OTP 通信框架对延迟的容忍度有限,这可能会触发各种超时,导
致业务疲于处理;第三,在广域网上的连接失效问题将导致经典的“脑裂”问题,而
RabbitMQ 目前无法处理(该问题主要是说 Mnesia)。

9. routing_key 和 binding_key 的最大长度是多 少?

答:255 字节。

10. RabbitMQ 中 “dead letter”queue 有什么用 途?

答:当消息被 RabbitMQ server 投递到 consumer 后,但 consumer 却通过
Basic.Reject 进行了拒绝时(同时设置 requeue=false),那么该消息会被放入“dead
letter”queue 中。该 queue 可用于排查 message 被 reject 或 undeliver 的原因。

11. RabbitMQ 中 Basic.Reject 的用法是什么?

答:该信令可用于 consumer 对收到的 message 进行 reject 。若在该信令中设置
requeue=true,则当 RabbitMQ server 收到该拒绝信令后,会将该 message 重新发送到下
一个处于消费状态的消费者处(理论上仍可能将该消息发送给当前 consumer)。若设置
requeue

问题一:RabbitMQ 中的 broker 是指什么?cluster 又是指什么? 问题二:什么是元数据?元数据分为哪些类型?包括哪些内容?与 cluster 相关的元数据 有哪些?元数据是如何保存的?元数据在 cluster 中是如何分布的? 问题三:RAM node 和 disk node 的区别? 问题四:RabbitMQ 上的一个 queue 中存放的 message 是否有数量限制? 问题五:RabbitMQ 概念里的 channel、exchange 和 queue 这些东东是逻辑概念,还是对应着进程实体?这些东东分别起什么作用? 问题六:vhost 是什么?起什么作用? 问题七:在单 node 系统和多 node 构成的 cluster 系统中声明 queue、exchange ,以及 进行 binding 会有什么不同? 问题八:客户端连接到 cluster 中的任意 node 上是否都能正常工作? 问题九:若 cluster 中拥有某个 queue 的 owner node 失效了,且该 queue 被声明具有 durable 属性,是否能够成功从其他 node 上重新声明该 queue ? 问题十:cluster 中 node 的失效会对 consumer 产生什么影响?若是在 cluster 中创建了 mirrored queue ,这时 node 失效会对 consumer 产生什么影响? 问题十一:能够在地理上分开的不同数据中心使用 RabbitMQ cluster 么? 问题十二:为什么 heavy RPC 的使用场景下不建议采用 disk node ? 问题十三:向不存在的 exchange 发 publish 消息会发生什么?向不存在的 queue 执行 consume 动作会发生什么? 问题十四:routing_key 和 binding_key 的最大长度是多少? 问题十五:RabbitMQ 允许发送的 message 最大可达多大? 问题十六:什么情况下 producer 不主动创建 queue 是安全的? 问题十七:“dead letter”queue 的用途? 问题十八:为什么说保证 message 被可靠持久化的条件是 queue 和 exchange 具有 durable 属性,同时 message 具有 persistent 属性才行? 问题十九:什么情况下会出现 blackholed 问题? 问题二十:如何防止出现 blackholed 问题? 问题二十一:Consumer Cancellation Notification 机制用于什么场景? 问题二十二:Basic.Reject 的用法是什么? 问题二十三:为什么不应该对所有的 message 都使用持久化机制? 问题二十四:RabbitMQ 中的 cluster、mirrored queue,以及 warrens 机制分别用于解决 什么问题?存在哪些问题?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值