Kafka消息的存储机制
Kafka通过topic来分主题存放数据,主题内有分区,分区可以有多个副本,分区的内部还细分为若干个segment。都是持久化到磁盘,采用零拷贝技术。
1、高效检索
分区下面,会进行分段操作,每个分段都会有对应的索引,这样就可以根据 offset二分查找定位到消息在哪一段,根据段的索引文件,定位具体的message。
2、分区副本可用性(leader选举,zk来协调)
如果 leader宕机,选出了新的 leader,而新的leader并不能保证已经完全同步了之前leader的所有数据,只能保证HW(高水位设置)之前的数据是同步过的,此时所有的 follower都要将数据截断到HW的位置,再和新的leader同步数据,来保证数据一致。
当宕机的 leader 恢复,发现新的leader 中的数据和自己持有的数据不一致,此时宕机的leader 会将自己的数据截断到宕机之前的hw位置,然后同步新leader
的数据。宕机的leader
活过来也像follower一样同步数据,来保证数据的一致性。