Kafka
2022-3-9 Mr Chang 面试题
1.什么是kafka?
Kafka是一个分布式发布-订阅消息系统,它最初是由Linkedin 公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务系统。它主要用于处理流式数据。
2 为什么要用kafka,为什么要使用消息队列?
缓冲和肖锋:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka可以在中间可以起到一个缓冲的作用。把消息暂存在kafka中,下游服务就可以按照自己的节奏慢慢进行处理。
解耦和扩展性:项目开始的时候并不能确定具体需求,消息队列可以作为一个接口层,解耦自己重要的业务流程。遵守约定,针对数据编程即可获取扩展能力。
冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。
健壮性:消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。
异步通信:很多时候,用户不想也不需要立即处理消息,消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它,想向队列中放入多少消息就放多少消息。然后在需要的时候再去处理。
3 Kafka中的ISR、AR又代表什么?ISR的伸缩又指什么?
ISR: In-Sync Replicas 副本同步队列
AR:Assigned Replicas 所有副本
ISR:是由leader维护,follower从leader同步数据有一些延迟(包括延迟时间 replica.lag.time.max.ms 和延迟条数 replica.lag.time.max.messages 两个维度)任意一个超过阙值都会把follower 剔除出ISR,存入OSR(Outof-Sync Replicas)列表,新加入的follower也会先存放在OSR中。
AR = ISR + OSR
4. Kafka中的broker是干什么的
broker是消息的代理,Producers往brokers里面的指定topic中写消息,Consumers 从brokers中拉取指定topic 的消息,然后进行业务处理,broker在中间起到一个代理保存消息的中转站。
5. zookeeper 起到什么作用,可以不用zookeeper么?
zookeeper是一个开源的分布式协调服务,是google chubby的一个开源实现,分布式应用程序可以基于zookeeper实现注入数据发布/订阅 负载均衡 命名服务 分布式协调/通知 集群管理, Master选举,配置维护等功能,
6. Kafka中follower如何与leader同步数据
Kafka 的复制机制既不是完全的同步复制,也不是单纯的异步复制,同步复制影响吞吐率,而异步复制如果leader 挂掉则会让follower异步复制的时候丢掉数据,kafka使用ISR的方式很好i的均衡了确保数据不丢失以及吞吐率,follower可以批量的从leader复制数据,而且leader 充分利用磁盘顺序读以及 send file 机制,这样极大的提高了复制性能,内部批量写磁盘,大幅减少了 follower与leader 的信息差。
7 什么情况下一个broker会从isr中踢出去
leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护 ,如果一个follower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将其重ISR中移除 。
8 kafka 为什么那么快?
(1)Cache Filesystem Cache PageCache 缓存
(2)顺序写,由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快。
(3)Zero-copy 零拷技术减少拷贝次数
(4)Batching of Messages 批量处理,合并小的请求,然后以流的方式进行交互,直顶网络上限
(5)Pull拉模式,使用拉模式进行消息的获取消费,与消息端处理能力相符。
9 kafka 公式计算
Kafka 的机器数量 = 2 *(峰值生产速度*副本数/100) + 1
副本数设定 一般设置 2-3个 很多企业设置为2个 副本的优势 :提高可靠性;副本劣势:增加了网络IO传输
Kafka日志保存时间:默认保存7 天; 生产环境建议3天
发表评论: