Kafka面试题

2020-05-04  本文已影响0人  你值得拥有更好的12138
1.Kafka定义

Kafka是分布式的发布订阅消息系统,可划分的,冗余备份的持久性日志服务

2.Kafka的作用
3.Kafka中ISR,AR表示什么?ISR伸缩是什么?

ISR由leader维护,如果其中一个副本的同步时间延迟与数据延迟达到一个阈值就会被踢出ISR,进入OSR,如果开启Unclean这个参数,副本leade挂掉就会从AR中选取新的leader,但这样就会有副本数据同步不一致的问题

4.kafka的数据同步(确认机制)
5.kafka为什么快
6.优化打入速度
7.kafka的Message格式

固定的Header:magic (attribute:当magic=1) crc

不定长的Body:键值对

8.Kafka为什么不支持读写分离
9.的偏移量是Offset+1
10.Kafka数据积压(限流)
11.Kafka数据丢失

​ 设置消息确认为-1,手动维护偏移量

12.Kafka数据重复

使用Redis进行数据去重

13.Kafka实现顺序消费(只能保证单分区)
14.Kafka的Leader选举
15.Kafka实现延迟队列

基于时间轮

image.png

若时间轮的tickMs=1ms,wheelSize=20,那么可以计算得出interval为20ms。初始情况下表盘指针currentTime指向时间格0,此时有一个定时为2ms的任务插入进来会存放到时间格为2的TimerTaskList中。随着时间的不断推移,指针currentTime不断向前推进,过了2ms之后,当到达时间格2时,就需要将时间格2所对应的TimeTaskList中的任务做相应的到期操作。此时若又有一个定时为8ms的任务插入进来,则会存放到时间格10中,currentTime再过8ms后会指向时间格10。如果同时有一个定时为19ms的任务插入进来怎么办?新来的TimerTaskEntry会复用原来的TimerTaskList,所以它会插入到原本已经到期的时间格1中。总之,整个时间轮的总体跨度是不变的,随着指针currentTime的不断推进,当前时间轮所能处理的时间段也在不断后移,总体时间范围在currentTime和currentTime+interval之间。

如果此时有个定时为350ms的任务该如何处理?直接扩充wheelSize的大小么?Kafka中不乏几万甚至几十万毫秒的定时任务,这个wheelSize的扩充没有底线,就算将所有的定时任务的到期时间都设定一个上限,比如100万毫秒,那么这个wheelSize为100万毫秒的时间轮不仅占用很大的内存空间,而且效率也会拉低。Kafka为此引入了层级时间轮的概念,当任务的到期时间超过了当前时间轮所表示的时间范围时,就会尝试添加到上层时间轮中。类似于钟表

16.Kafka事务
17.O COPY技术

传统发送方式

image.png

Kafka的发送方式


image.png
上一篇 下一篇

猜你喜欢

热点阅读