一,上来就问了项目里日志的处理量,50w 100M左右
二,问项目里如何解决Hbase的热点问题,面试官没听明白,后面就直接问热点问题如何解决的 答的就举年份例子,加盐,预分区
三,Kafka里是如何leader和follow是如何实现同步的
具体怎么实现同步我确实不知道,我就答的是offset在follow和leader挂了后如何在实现同步的,面试官说我似乎说了又没说明白,后面查了一下,下面就补充吧
四,Hbase读写原理 说了读数据原理,写数据原理就说了和读数据原理差不多也
五,你了解mysql的索引嘛,有哪些是不会用到索引的
答了,索引的分类,like和or,还有多值索引的最左前缀原则 说完,他就直接问了下一个问题
六,Spark的宽窄依赖你知道吗
我回答上,还说了stage和task
七,Hadoop读写原理
开始的懵住了,答成了yarn的执行原理,后来也回过头来答对了
八,问了一个数据结构的问题,我说了个排序算法,插入排序
在说排序算法的时候,对面网挂了,就在调那网,然后就说结束了,我都还没提问额。。。。
补充一下应答leader和follow应答机制:
leader和follow副本同步机制:
(选择性的提一提)
首先先明确生产者上传数据后有三种ack策略应答,
第一种是acks=0,也叫nosck,就是不管leader有没有直接写到磁盘,只要leader应答开始写就返回成功,接着发数据,这个是叫至多发送一次
第二种就是ack=1,此时是只有当leader落盘后才能够应答发送下一条数据,不管副本有没有同步,但是当leader在在应答成功后挂了,还未来得及进行副本同步就挂了,但应答却是成功了,那数据就丢失了,
第三种是ack=-1,也是最安全的一种,就是只有当leader和follow都落盘了,才应答,存储下一条数据,但当follow在同步过程中挂了,leader就迟迟等待follow同步嘛,不是,kafka在zookeeper上维护了一个isr队列,队列里面都是和zookeeper能够实现心跳的结点leader和follow当如果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR。该时间阈值由replica.lag.time.max.ms参数设定,默认30s
LEO:(LogEndOffset)最后的一个索引位置 副本和leader都有
HW:水位线,就是当follow和leader里最小的LEO
所谓同步,必须满足两个条件:
副本节点必须能与zookeeper保持会话(心跳机制)
副本能复制leader上的所有写操作,并且不能落后太多(卡主或滞后的副本控制由replica.lag.time.max.ms配置)
副本间的同步过程就是依赖LEO和HW来以他们的值变化来演示副本同步消息的过程,
首先生产者不停的向leader写入数据,这个时候leader的LEO可能已经为10了,但HW还是0,两个follow就开始向leader请求同步数据,他们LEO值都为0,然后消息继续写入,LEO的值又发生了变化,俩个follow也各自拉去到了自己的信息,于是更新自己的LEO,但这时Leader的HW依然没有改变
此时,follow依旧向leader拉取数据,这个时候leader会更新自己的HW值,取Follower中的最小的LEO值来更新比如为7,此时leader就响应自己的HW给follow,follow就更新自己的HW值,因为又拉到了数据,就继续更新自己的LEO,依次类推