最近,计划将Kafka重新学习一遍,因此记录一些我认为重要的知识点。
一、基本概念
1.一个或多个Broker(服务代理节点)组成了一个Kafka集群。
2.一个topic可细分为多个分区(一个分区只属于单个topic),分区可以分布在不同的服务器(Broker)上,分区中消息是不同的。
3.offset是消息在分区中唯一标识,kafka通过它来保证消息在分区内的顺序性,offset不分区,因此不保证topic的顺序性。
4.同一分区有多个副本(一主多从,每个副本的消息是同步的,但在同一时刻,副本之间并非完全一样),leader副本负责读写,follower副本负责与leader副本消息同步。
5.分区中所有副本统称为AR(Assigned Replicas)
所有与follower副本保持一定程度同步(指可忍受的滞后范围,可通过参数配置)的副本(包括leader副本)组成ISR(In-Sync Replicas)。
与leader副本滞后过多的副本组成OSR(Out-of-Sync Replicas)。
综上可得,AR=ISR+OSR,但是正常情况下,一般AR=ISR。
6.HW(High Watermark)俗称高水位,它标志了一个特定的消息偏移量(offset),消费者只能拉取到这个offset之前的消息。eg:若日志文件的HW为8,表示消费之只能拉取到offset在0-7之间的消息,而offset为8的消息消费者是不可见的。
7.LEO(Log End Offset)标识当前文件中心下一条待写入消息的offset。
8.分区ISR集合中的每个副本都会维护自身的LEO,而ISR集合中最小的LEO即为分区HW,对消费者而言只能消费HW之前的消息。例如:有三个副本,一个leader两个follwer,其中每leader的LEO为5,follwer1完全同步后LEO也为5,follwer1部分同步LEO为4,此时分区的HW为4。
9.同步复制要求所能工作的follower副本都复制完,这条消息才会被确认为已成功提交。
异步复制,只要leader副本写入就被热内而出这条消息已成功提交。这种情况,如果如果follower副本没有复制完落后于leader,突然leader宕机,则会导致数据丢失。