消息队列面试题

1. Zookeeper对Kafka的作用是什么

  1. Zookeeper是一个开放源码的、高性能的协调服务,它用于Kafka的分布式应用。
  2. Zookeeper主要用于在集群中不同节点之间进行通信。
  3. 在Kafka中,他被用于提交偏移量,因此,如果节点在任何情况下失败了,他都可以从之前提交的偏移量中获取。
  4. 除此之外,还执行其他活动:如 Leader检测、分布式同步、配置管理、感知节点变化等。

2. 什么确保了Kafka中服务器的负载平衡

由于领导者的角色是执行分区的所有读写请求任务,而追随者被动的复制领导者。因此,在领导者失败时,其中一个追随者接管了领导者的角色。基本上,整个过程可确保服务器的负载平衡。

3. Kafka为什么那么快

  1. Cache FileSystem Cache PageCache缓存
  2. 顺序写由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快
  3. Zero-copy 零拷贝技术减少拷贝次数
  4. Batching Of Messages 批量量处理。合并小的请求,然后以流的方式进行交互,直顶网络上限。
  5. Pull 拉模式,使用拉模式进行消息的获取消费,与消费端处理能力相符。

4. 什么情况会导致Kafka运行变慢

  1. CPU性能瓶颈.
  2. 磁盘读写瓶颈.
  3. 网络瓶颈.

5. 在生产者中,何时发送QueueFullException?

在生产者中,QueueFullException的发送通常与Kafka生产者的内部缓冲队列的状态有关。这种异常主要发生在以下情况:

  1. 生产者发送速度过快
  • 当生产者尝试将消息发送到Kafka主题时,如果其发送消息的速度超过了Kafka Broker处理消息的速度,那么生产者的内部缓冲队列可能会迅速填满。
  • Kafka生产者有一个配置参数buffer.memory,用于设置生产者缓冲区的大小,默认值为32M。当生产者的待发送消息占用了所有缓冲区空间。并且没有足够的空间来容纳新的消息时,会触发QueueFullException.
  1. Kafka Broker处理能力不足
  • 如果Kafka Broker处于高负载状态,处理消息的速度变慢,那么生产者的缓冲队列也可能因为消息积压而堆积,最终导致缓冲区满。
  1. 网络延迟
  • 高网络延迟可能导致生产者无法及时将消息发送到Broker,从而加剧了缓冲区的堆积情况,最终触发QueueFullException。

6. RabbitMQ有哪些重要的组件

  • ConnectionFactory(连接管理器):应用程序和Rabbit之间建立连接的管理器,程序代码中使用
  • Channel (信道): 消息推送使用的通道
  • Exchange(交换器) 用于接收、分配消息
  • Queue(队列): 用于存储生产者的消息
  • RoutingKey(路由键):用于把生产者的数据分配到交换器上
  • BindingKey(绑定键):用于把交换器的消息绑定到队列上

7. RabbitMQ中vhost的作用是什么

vhost可以理解为虚拟的broker,其内部含有独立的queue、exchange和binding,但 最重要的是,其拥有独立的权限系统,可以做到vhost范围的用户控制。 当然,从RabbitMQ的全局角度,vhost可以作为不同权限隔离的手段。

8. RabbitMQ的消息是怎么发送的

首先客户端必须连接到RabbitMQ服务器才能发布和消费消息,客户端和Rabbit server之间会创建一个tcp连接,一旦tcp打开并通过了认证(认证就是发送给rabbit服务器的用户名和密码),客户端和RabbitMQ就会创建一条amqp通道, 信道是创建在【真实】tcp上的虚拟连接,amqp命令都是通过信道发送出去的。

9. RabbitMQ要保证消息持久化成功的条件有哪些

  1. 声明队列必须设置持久化durable为true
  2. 消息推送投递模式必须设置持久化,deliverymode设置为2(持久)
  3. 消息已经到达持久化交换器
  4. 消息已经到达持久化队列

以上四个条件都满足才能保证消息持久化成功

10. RabbitMQ持久化有什么缺点

持久化的缺点就是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量。可尽量使用ssd硬盘来缓解吞吐量的问题。

11. RabbitMQ有几种类型

三种广播模式:

  1. fanout:所有绑定到此exchange的queue都可以接收信息(纯广播,绑定到RabbitMQ的接受者都能收到信息)。
  2. direct: 通过routingKey和exchange决定的那个唯一的queue可以接收信息。
  3. topic:所有符合routingKey(此时可以是一个表达式)的routingKey所bind的queue可以接收消息。

12. RabbitMQ节点的类型有哪些

磁盘节点:消息会存储到磁盘
内存节点:消息都存储在内存中,重启服务器消息丢失,性能高于磁盘类型。

13. RabbitMQ每个节点是其他节点的完整拷贝吗?为什么?

不是,原因有两个

  1. 存储空间的考虑:如果每个节点都拥有所有队列的完全拷贝,这样新增节点不但没有新增存储空间,反而增加了更多的冗余数据。
  2. 性能的考虑:如果每条消息都需要完整拷贝到每一个集群节点,那新增节点并没有提升处理消息的能力,最多是保持和单节点相同的性能。

14. RabbitMQ对集群节点停止顺序有要求吗

RabbitMQ对集群的停止顺序是有要求的,应该先关闭内存节点,在关闭磁盘节点。如果顺序恰好相反的话,可能会造成消息的丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值