
分布式消息队列面试题
文章平均质量分 62
似来
一个老程序员
展开
-
一线大厂面试真题——RabbitMQ实现延迟队列的两种方式
先向队列中发送一个60秒到期的消息,再往队列中发送一个30秒到期的消息.预想的是队列先执行30秒的消息,再执行60秒的消息.但是实际情况是60秒的消息会阻塞队列,导致先执行了60秒的消息,再执行30秒的消息.(延迟30秒的要求没有实现)1、安装rabbitMQ延迟插件 ---> rabbitmq-delayed-message-exchange (高版本的rabbitMQ安装完插件之后无需重启)当出现添加交换机有如图所示的选项时,说明安装插件成功。1、创建死信队列和转发队列。5、绑定延迟队列和交换机。原创 2024-01-19 09:56:57 · 494 阅读 · 0 评论 -
一线大厂面试真题-Kafka中一个Topic有三个Partition,同一个消费组中两个消费者如何消费的
它会根据消费者订阅的Topic中的partition数量、和消费组中的消费者实例数量来决定每个消费者消费哪些 Partition。这个算法会在消费组中选择一个消费者实例作为Leader,Leader负责分配Partition给消费者实例,并协调消费者实例之间的Partition分配和Reblance。来的问题是,一个消费组中两个消费者去消费三个Partition,很自然的想。加入或离开消费组的时候,协调器会触发Partition的重新分配,确。在同一个消费组中,一个消费者可以消费多个Partiti。原创 2024-01-05 19:39:56 · 761 阅读 · 0 评论 -
一线大厂面试真题-说一下Kafka中Partition分区副本的Leader选举算法问题分析
ISR(In-Sync Replica)是指与Leader同步的副本集合,它们的数据同步状态。时,为了保证Partition分区的可靠性,Kafka设计了分区副本的概念,也就是一个。因为在Kafka中,除了Partition分区副本的Leader选举以外,还有Kafk。举出来的Leader,由于和原来老的Leader节点的数据存在较大的延。在多个副本中,由于设计到数据的同步,所以Kafka针对Partiti。副本作为新的Leader,也就是ISR集合中的副本。具有最新数据的副本作为新的Lead。原创 2024-01-05 19:37:37 · 458 阅读 · 0 评论 -
一线大厂面试真题-Kafka消息队列怎么保证exactly Once,怎么实现顺序消费
2. 虽然生产者能保证在Kafka broker上只记录唯一一条消息,但是由于网络延迟的存在,有可能会导致Broker在投递消息给消费者的时候,触发重试导致投递多次。所以消费端,可以采用幂等性的机制来避免重试带来的重复消费问题。如果出现导致生产者重试的错误,同样的消息,仍由同样的生产者发送多次,这个消息只被写到Kafka broker的日志中一次。然后对producer。回答好这个问题,必须要从上面这两个角度去切入,下面看看这个问题的回答。采用事物消息的方式,事务可以支持多分区的数据完整性,原子性。原创 2024-01-05 09:17:15 · 403 阅读 · 0 评论 -
一线大厂面试真题-Kafka如何保证消息消费的顺序性
最近很多同学去面试,都被问到“MQ如何保证消费顺序性”这样一个问题很多人都没回到上来,特别是面试官在面试的时候,还会再补充一句:“还有没有其他方案”。然后求职者一脸懵逼,实在不知道该怎么回答。问题解答从两个方面来回答1、kafka为什么会存在无序消费2、kafka如何保证有序消费首先,在kafka的架构里面,用到了Partition分区机制来实现消息的物理存储(如图),在同一个topic下面,可以维护多个partition来实现消息的分片。原创 2024-01-04 19:21:24 · 379 阅读 · 0 评论 -
一线大厂面试真题-什么是ISR,为什么需要引入ISR
生产者发送过来的消息,会先存到Leader Partition里面,然后再把消息复制到Follower Partition,这样设计的好处就是一旦Leader Partition所在的节点挂了,可以重新从剩余的。ISR全称是in-sync replica,它是一个集合列表,里面保存的是和Lea。,ISR列表里面的节点,同步的数据一定是最新的,所以后续的Leader选举,是这两种方案,要么带来性能问题,要么带来数据丢失问题,都不是特别合适。证数据同步的效率,因为同步效率不高的节点都会被踢出ISR列表。原创 2024-01-04 19:18:06 · 377 阅读 · 0 评论 -
一线大厂面试真题-Kafka怎么避免重复消费
所以在Consumer消费的过程中,应用程序被强制kill掉或者宕机,可能会导致Offs。新Rebalance之后,Consumer还是会从之前没提交的Offset位置开始消费,每消费一批数据,Kafka Broker就会更新OffSet的值,避免重复消费。先,(如图)Kafka Broker上存储的消息,都有一个Offset标记。的Partition里面去消费消息,如果Consumer在默认的5分钟。默认情况下,消息消费完以后,会自动提交Offse。的背景下,我认为解决重复消费消息问题的方法有几个。原创 2024-01-04 15:10:42 · 432 阅读 · 0 评论 -
一线大厂面试真题-Kafka如何保证消息不丢失
如图)但是,Kafka为了提升性能,采用了异步批量刷盘的实现机制,也就是说按照一定的消息量和时间间隔来刷盘,而最终刷新到磁盘的。. acks=0,表示producer不需要等Broker的响应,就认为消息发送成功,这种。从高手的回答可以发现,任何的技术问题,是可以按照请求的顺序,或者调用关系来逐层推导去回答的。是Producer端,需要确保消息能够到达Broker并实现消息存储,在这个层面,broker的消息可靠的到了保障,那么消费端是不太可能出现消息无法消费的问题,原创 2024-01-04 09:53:44 · 1010 阅读 · 0 评论 -
一线大厂面试真题-滴滴二面:kafka的零拷贝原理
除此之外,由于用户空间和内核空间的切换会带来CPU的上线文切换,对于C。在这个流程中,数据只经历了两次拷贝就发送到了网卡中,并且减少了2次c。,如果我们需要把磁盘中的某个文件内容发送到远程服务器上,如图。现,数据从磁盘到最终发送出去,要经历4次拷贝,而在这四。而零拷贝,就是把这两次多于的拷贝省略掉,应用程序可以直。,而不需要再经过应用程序所在的用户空间,如下图所示。的I/O提升,省去了用户空间到内核空间复制的开销。所以,所谓零拷贝,并不是完全没有数据赋值,只是。()方法,把用户空间缓冲区中的数据。原创 2024-01-04 09:51:03 · 554 阅读 · 0 评论 -
一线大厂面试真题-多线程异步和MQ有什么区别
1. 处理任务的维度不同,多线程是同一个进程中的多个线程并行处理任务,MQ是通过把消息发送到不同应用节点的不同进程来处理任务。3. 分布式能力方面,MQ 具备分布式能力,可以把消息分发到不同的节点存储和消费、多线程只能在一个进程中处理任务。多线程是进程内的概念、MQ是分布式消息队列,两者不在同一个维度上;MQ虽然在特性上都支持程序的异步操作,但是在实现本质上区别比较大,性不同,多线程异步处理任务时,数据是基于共享内存来交互的,一旦程。这个问题主要考察候选人对于并发编程和分布式消息队列的理解,原创 2024-01-03 17:52:27 · 504 阅读 · 0 评论 -
一线大厂面试真题-如何处理消息队列的消息积压问题
据,消费后不做处理,而是直接再把这些数据写入临时建立的Topic的10个。的消费者节点来部署Consumer,专门来消费临时的Partition分。统bug导致的,那我们可以优化消费端的逻辑,比如通过异步的。大量消息堆积,那么首先需要解决系统bug,然后临时做紧。署架构,把临时的Topic和临时申请的机器释放掉。通常来说,消息积压的原因是生产者的消息生产速度。通过上面这种方法,可以快速把现在堆积的消息处理。来处理消息、或者通过批量处理的方式来消费。等积压的消息处理结束后,再。2. 接着把现在所有的消。原创 2024-01-03 17:48:41 · 366 阅读 · 0 评论 -
大厂面试题-RabbitMQ如何实现高可用
2、同时为了避免HAProxy的单点故障,可以再增加Keepalived实现HAProxy的主备,如果HAProxy主节点出现故障那么备份节点就会接管主节点提供服务。这种方式能够保证Queue的高可用性,但是集群副本之间的同步会带来性能的损耗。第一种是普通集群模式,在这种模式下,一个Queue的消息只会存在集群的一个节点上,它的好处是通过多个节点分担了流量的压力,提升了消息的吞吐能力。点会同步Queue所在节点的元数据,消息在生产和消费的时候,不。模式下,各个节点只同步元数据,不同步队列中的消息。原创 2023-12-31 21:42:17 · 404 阅读 · 0 评论 -
一线大厂面试真题——如何保证RabbitMQ的消息可靠传输
不过虽然设置了持久化消息,但是有可能会出现,消息刷新到磁盘之前,Rabbit。Server端以后,如果消息处理成功,Server端会返回一个ack消息。Server端来说,可以开启消息的持久化机制,也就是收到消息之后持久。首先,在RabbitMQ的整个消息传递过程中,有三种情况会存在丢失。从生产者发送消息的角度来说,RabbitMQ提供了一个Confir。生产者把消息发送到RabbitMQ Server的过程中丢失。b.发送消息的时候,把消息投递模式设置为。从消费端的角度来说,我们可以把消息的自动确认机。原创 2023-12-31 17:16:26 · 422 阅读 · 0 评论 -
一线大厂面试真题——RabbitMQ的消息如何实现路由
2、fanout:广播机制,这种方式不会基于Routing key来匹配,而是把消息广播给绑定到当前Exchange上的所有队列上。3、topic:正则表达式匹配,根据Routing Key使用正则表达式进行匹配,符合匹配规则的Queue都会收到这个消息。它负责接收生产者的消息然后把消息路由到消息队列,而消息的路由规则由ExchangeType和Binding决定。y之后,根据RoutingKey和路由表里面的BindingKey进行匹配,而匹配的规则是通过。面试的时候,面试官一般会问你用过的技术组件。原创 2023-12-31 16:56:47 · 407 阅读 · 0 评论 -
一线大厂面试真题--谈谈你对MQ的理解
有位56年工作经验的面试被问到,什么是消息中间件。平时只关注使用,并没有去总结过,竟然被这个问题住了。一、什么是MQMQ全称是Message Queue,直译过来叫做消息队列,主要是作为分布式应用之间实现异步通信的方式。主要由三个部分组成 ,分别是生产者、消息服务端和消费者。生产者Producer是生产消息的一端,相当于消息的发起方,主要负责载业务信息的消息的创建。然后是消息服务端(Server),是处理消息的单元,本质就是用来创建和保存消息队列,它主要负责消息的存储。原创 2023-12-31 16:53:42 · 893 阅读 · 0 评论 -
大厂面试真题-什么是消息队列
消息队列Message Queue,简称MQ。是一种应用间的通信方式,主要由三个部分组成生产者:Producer消息的产生者与调用端主要负责消息所承载的业务信息的实例化是一个队列的发起方代理Broker主要的处理单元负责消息的存储、投递、及各种队列附加功能的实现是消息队列最核心的组成部分消费者:Consumer一个消息队列的终端也是消息的调用端具体是根据消息承载的信息,处理各种业务逻辑。消息队列的应用场景异步处理主要应用于对实时性要求不严格的场景,原创 2023-12-30 20:24:45 · 361 阅读 · 0 评论