kafka糊弄学(核心知识碎片)
之前讲过一些kafka的api与简单使用,但是在一些大公司和面试高级工程师岗位过程中发现kafka有很多薄弱点需要加强。这里重点学习一下原理,还有集群部署以及宕机恢复还有实际使用中的一些问题。
以下图文主要转载自尚硅谷kafka课件,链接: https://pan.baidu.com/s/17XOeCBYdyfNqWJPxb_dMsA 提取码: 5sp9
一、kafka基础知识
kafka提高并发的方式主要是通过增加分区,分区默认采用round-robin算法,这里不赘述,因为一般面试不问这个。
下面这个是面试中经常问到的
这里蛮记一下ISR
这里的leader是指partition的副本有分为lead和follw
简单理解就是ack有三个等级,一个是不等待broker相应,如果broker挂了,消息就丢失了;第二个是等待leader落盘后,答复,但是如果leader挂了就没有。
第三种如果是在follw同步完成后,broker发送ack之前,leader再次挂了,会造成数据重复。如下图
接下来这个比较绕,可能一些变态面试官会问这个。
就是
follw挂了如何恢复:挂了时候会被踢出ISR,这时候会记录一个所有副本最低的offset,恢复后,将自身比这个offset多的改成一样。然后再从leader获取。
leader挂了怎么恢复:首先选出一个新的leader,这时候所有follwer会将全集的最低offset以上的截掉,改成和新的leader一样。最重要的是,这里只保证了数据一致性,没法保证消息不丢失
简单用人话讲就是可以保证不丢失,但是不重复。可以保证不重复,但是不能保证不丢失。当消息非常重要的时候,必须发送成功必须消费时候,提供提供
开始类似全局事务提供一个pid,但是这个pid重启就会变化,也没法保证不同parttion有不通。所以在使用的时候,最后指定某个分区。
还有一部分讲producer拦截器的,这里省略一般考不到。