1 Star 0 Fork 31

霍月龙 / Ebooks

forked from dearHaoGeGe / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
最新30道面试题2021年消息队列面试题及答案汇总.md 8.68 KB
一键复制 编辑 原始数据 按行查看 历史

最新30道面试题2021年消息队列面试题及答案汇总

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

消息队列

题1:RabbitMQ 如何确保每个消息能被消费?

RabbitMQ使用ack消息确认的方式保证每个消息都能被消费,开发者可根据自己的实际业务,选择channel.basicAck()方法手动确认消息被消费。

题2:Kafka 的分区策略有哪些?

ProducerRecord内部数据结构:

-- Topic (名字) -- PartitionID ( 可选) -- Key[( 可选 ) -- Value

提供三种构造函数形参:

ProducerRecord(topic, partition, key, value)
ProducerRecord(topic, key, value)
ProducerRecord(topic, value)

第一种分区策略:指定分区号,直接将数据发送到指定的分区中。

第二种分区策略:没有指定分区号,指定数据的key值,通过key取上hashCode进行分区。

第三种分区策略:没有指定分区号,也没有指定key值,直接轮循进行分区。

第四种分区策略:自定义分区。

题3:数据传输的事务定义有哪三种?

和 MQTT 的事务定义一样都是3种。

1)最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输。

2)最少一次: 消息不会被漏发送,最少被传输一次,但也有可能被重复传输。

3)精确的一次(Exactly once): 不会漏传输也不会重复传输,每个消息都传输被一次而且仅仅被传输一次,这是大家所期望的。

题4:Kafka 消费者如何不自动提交偏移量,由应用提交?

将auto.commit.offset设为false,然后在处理一批消息后commitSync()或者异步提交commitAsync()即:

ConsumerRecords<> records = consumer.poll(); 
for(ConsumerRecord<> record : records){
   try{
       consumer.commitSync();
   }
}

题5:RabbitMQ都有哪些特点?

可靠性

RabbitMQ使用一些机制来保证可靠性,如持久化、传输确认及发布确认等。

灵活的路由

在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。

扩展性

多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点。

高可用性

队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队列仍然可用。

多种协议

RabbitMQ除了原生支持AMQP协议,还支持STOMP,MQTT等多种消息中间件协议。

多语言客户端

RabbitMQ几乎支持所有常用语言,比如Java、Python、Ruby、PHP、C#、JavaScript等。

管理界面

RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等。

插件机制

RabbitMQ提供了许多插件,以实现从多方面进行扩展,当然也可以编写自己的插件。

题6:RabbitMQ 实现消息持久化需要满足哪些条件?

RabbitMQ 要实现消息持久化,必须满足以下 4 个条件:

1、投递消息的时候durable设置为true,消息持久化,代码:channel.queueDeclare(x, true, false, false, null),第2个参数设置为true持久化;

2、设置投递模式deliveryMode设置为2(持久),代码:channel.basicPublish(x, x, MessageProperties.PERSISTENTTEXTPLAIN,x),第3个参数设置为存储纯文本到磁盘;

3、消息已经到达持久化交换器上;

4、消息已经到达持久化的队列。

题7:Kafka 中如何提高远程用户的吞吐量?

如果用户位于与broker不同的数据中心,则可能需要调优套接口缓冲区大小,以对长网络延迟进行摊销。

题8:什么是 Apache Kafka?

Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。

Apach Kafka是一款分布式流处理框架,用于实时构建流处理应用。它有一个核心的功能广为人知,即作为企业级的消息引擎被广泛使用。

题9:RabbitMQ 交换器类型有哪些?

RabbitMQ 消费类型也就是交换器(Exchange)类型有以下四种:

direct:轮询方式。

headers:轮询方式,允许使用header而非路由键匹配消息,性能差,几乎不用。

fanout:广播方式,发送给所有订阅者。

topic:匹配模式,允许使用正则表达式匹配消息。

RabbitMQ默认的是direct方式。

题10:Kafka 中 consumer 是推还是拉?

Kafka最初考虑的问题是,customer应该从brokes拉取消息还是brokers将消息推送到consumer,也就是pull还push。在这方面,Kafka遵循了一种大部分消息系统共同的传统的设计:producer将消息推送到broker,consumer从broker拉取消息。

一些消息系统比如Scribe和Apache Flume采用了push模式,将消息推送到下游的consumer。这样做有好处也有坏处:由broker决定消息推送的速率,对于不同消费速率的consumer就不太好处理了。消息系统都致力于让consumer以最大的速率最快速的消费消息,但不幸的是,push模式下,当broker推送的速率远大于consumer消费的速率时,consumer恐怕就要崩溃了。最终Kafka还是选取了传统的pull模式。

Pull模式的另外一个好处是consumer可以自主决定是否批量的从broker拉取数据。Push模式必须在不知道下游consumer消费能力和消费策略的情况下决定是立即推送每条消息还是缓存之后批量推送。如果为了避免consumer崩溃而采用较低的推送速率,将可能导致一次只推送较少的消息而造成浪费。Pull模式下,consumer就可以根据自己的消费能力去决定这些策略。

Pull有个缺点是,如果broker没有可供消费的消息,将导致consumer不断在循环中轮询,直到新消息到t达。为了避免这点,Kafka有个参数可以让consumer阻塞知道新消息到达(当然也可以阻塞知道消息的数量达到某个特定的量这样就可以批量发送)。

题11:kafka-中使用零拷贝zero-copy有哪些场景

题12:zookeeper-对于-kafka-的作用是什么

题13:kafka-对比传统技术有什么优势

题14:kafka为什么需要复制

题15:rabbitmq-和-kafka-有什么区别

题16:amqp是什么

题17:rabbitmq-事务在什么情况下是无效的

题18:kafka-分区-leader-选举策略有几种

题19:kafka分布式的情况下如何保证消息的顺序消费

题20:kafka-有几种数据保留的策略

题21:kafka-中位移-offset-有什么作用

题22:kafka-中副本在-isr-中停留很长时间表明什么

题23:rabbitmq-中消息是基于什么传输

题24:什么是消息队列

题25:监控-kafka-的框架都有哪些

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/huo-yuelong/ebooks.git
git@gitee.com:huo-yuelong/ebooks.git
huo-yuelong
ebooks
Ebooks
master

搜索帮助