0.本笔记是在学习B站上尚硅谷视频教程的重点笔记,有些可能在面试中问到,故于此记录。

1.消息队列内部实现原理

kafka 死信队列Acknowledgment kafka消息队列的缺点_数据

 

消息队列的优点:

1)解耦

2)冗余

3)扩展性

4)灵活性,峰值处理

5)可恢复性

6)顺序保证

7)缓冲

8)异步通信

2.请简单说一下消息队列两种模式的优缺点

消息队列有点对点模式(一对一,消费者主动拉取数据,消息收到后消息消除),发布/订阅模式(一对多,数据生产后,推送给所有订阅者)。其中点对点模式,对消息队列的数据发送速率没有要求,可以根据自己的速率来,缺点就是需要一个线程对队列进行监控。订阅模式的缺点在于,统一的消息发送速度。

3.Kafka中有几种角色?

kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,接收消息者称为Consumer。卡夫卡是采用点对点的模式进行数据消费。

4.Kafka集群管理模式?

一个Topic会有一个leader和一个follower,分布在不同的机器上,起到备份的作用。读写都是通过leader来完成,follower不做客户端的响应。同一个组的消费者只可以消费不同分区的数据,不可以同时消费同一个分区的数据。

5.Kafka工作流程分析

kafka 死信队列Acknowledgment kafka消息队列的缺点_数据_02


设置的副本数一定要小于等于你的Broker数。同一个组中的消费者不能消费同一个分区的数据,但是可以消费同一topic不同分区的数据,所以分区可以起到增加并发度的作用,同时可以在一定程度上实现负载均衡,因为不同的分区放在不同的机器上。

6.Kafka的生成过程分析

producer采用推的方式将消息发布到broker中,每条消息都被追加到分区当中,属于顺序写磁盘。每个分区的消息都是有序的,生产消息被不断追加到分区日志上,每个消息都被赋予一个唯一的offset值。

分区的原则:

1)指定了partition,则直接使用。

2)未指定partiton但指定key,可以通过key的value进行hash出一个partition。

3)  partition和key都未指定,使用轮询选出一个partition。

7.Producer的写入流程

kafka 死信队列Acknowledgment kafka消息队列的缺点_数据_03

如何保证producer产生的数据都被准确接收?将ACK应答机制配置设为all。

8.Broker保存消息

数据存在partition文件下的一个.log文件中。存策略,默认一周删一次,超过设定大小就会删掉。

kafka 死信队列Acknowledgment kafka消息队列的缺点_kafka_04

9.Kafka消费过程分析

1)高级API的优点:不需要自行管理offset,系统通过zookeeper进行管理,不需要管理分区,副本等情况。

2)高级API的缺点:不能自己控制offset和细化控制分区,副本。也就无法做到重新消费,无法控制从哪里读。

kafka 死信队列Acknowledgment kafka消息队列的缺点_消息队列_05