Kafka经典面试题,你都会吗?
01.为什么要使用消息中心?
消息通讯:可以作为基本的消息通讯,比如聊天室等工具的使用 异步处理 : 将一些实时性要求不是很强的业务异步处理,起到缓冲的作用,一定程度上也会避免因为有些消费者处理的太慢或者网络问题导致的通讯等待太久,因而导致的单个服务崩溃,甚至产生多个服务间的雪崩效应; 应用解耦 : 消息队列将消息生产者和消费者分离开来,可以实现应用解耦 流量削峰: 可以通过在应用前端采用消息队列来接收请求,可以达到削峰的目的:请求超过队列长度直接不处理,重定向至错误页面。类似于网关限流的作用 冗余存储:消息队列把数据进行持久化,直到它们已经被完全处理,通过这一方式规避了数据丢失风险
02.聊聊Kafka的特点
可靠性:Kafka是分布式的、可分区的、数据可备份的、高度容错的 可扩展性:在无需停机的情况下实现轻松扩展 消息持久性:Kafka支持将消息持久化到本地磁盘 高性能:Kafka的消息发布订阅具有很高的吞吐量,即便存储了TB级的消息,它依然能保持稳定的性能
03.你会在哪些场景选择使用Kafka?
我个人接触的项目中,Kafka使用最多的场景,就是用它与FileBeats和ELK组成典型的日志收集、分析处理以及展示的框架
FileBeats先将数据传递给消息队列,Logstash server(二级Logstash)拉取消息队列中的数据,进行过滤和分析,然后将数据传递给Elasticsearch进行存储,最后,再由Kibana将日志和数据呈现给用户
由于引入了Kafka缓冲机制,即使远端Logstash server因故障停止运行,数据也不会丢失,可靠性得到了大大的提升
04.Kafka使用哪种方式消费消息,pull还是push?
05.Kafka与Zookeeper是什么关系?
06.聊聊Kafka的架构
因此,想要保证消息的顺序性,只在新建topic时,指定一个分区即可
07.Kafka的缓冲池满了怎么办?
08.数据传输的事务有几种?
最多一次(<=1): 消息不会被重复发送,最多被传输一次,但也有可能一次不传输 最少一次(>=1):消息不会被漏发送,最少被传输一次,但也有可能被重复传输 精确的一次(Exactly once)(=1): 不会漏传输也不会重复传输,每个消息都传输被一次而且仅仅被传输一次,这是大家所期望的 那么,每种传输,分别是怎样实现的呢?
最多一次:consumer先读消息,记录offset,最后再处理消息
09.Kafka在什么情况下会出现消息丢失?
10.Kafka的性能好在什么地方?
buffer = File.read
Socket.send(buffer)
先读取、再发送,实际会经过以下四次复制
2、将内核缓冲区的数据,复制到应用程序缓冲区Application Buffer
3、将应用程序缓冲区Application Buffer中的数据,复制到socket网络发送缓冲区
4、将Socket buffer的数据,复制到网卡,由网卡进行网络传输
三 总结
总而言之
评论