一、kafka replication
1.当某个topic的replication-factor为N且N大于1时,每个Partition都会有N个副本(Replica)。kafka的replica包含leader与follower。 2.Replica的个数小于等于Broker的个数,也就是说,对于每个Partition而言,每个Broker上最多只会有一个Replica,因此可以使用Broker id 指定Partition的Replica。 3.所有Partition的Replica默认情况会均匀分布到所有Broker上。
示例命令:bin/kafka-topics.sh --create --bootstrap-server kafka1:9092,kafka1:9092,kafka0:9092 --topic sg3-Logined --partitions 6 --replication-factor 2
二、Kafka中的ISR、AR解析:
分区中的所有副本统称为AR(Assigned Repllicas)。所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas),ISR集合是AR集合中的一个子集。
消息会先发送到leader副本,然后follower副本才能从leader副本中拉取消息进行同步,同步期间内follower副本相对于leader副本而言会有一定程度的滞后。
前面所说的“一定程度”是指可以忍受的滞后范围,这个范围可以通过参数进行配置。
与leader副本同步滞后过多的副本(不包括leader)副本,组成OSR(Out-Sync Relipcas),由此可见:AR=ISR+OSR。在正常情况下,
所有的follower副本都应该与leader副本保持一定程度的同步,即AR=ISR,OSR集合为空。
Leader副本负责维护和跟踪ISR集合中所有的follower副本的滞后状态,当follower副本落后太多或者失效时,leader副本会吧它从ISR集合中剔除。
如果OSR集合中follower副本“追上”了Leader副本,之后再ISR集合中的副本才有资格被选举为leader,而在OSR集合中的副本则没有机会(这个原则可以通过修改对应的参数配置来改变)
三、kafka中的ISR、HW、LEO、LW、LSO等分别代表什么?
ISR指的是所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas)
HW是High Watermak的缩写, 俗称高水位,它表示了一个特定消息的偏移量(offset),消费之只能拉取到这个offset之前的消息。
leader收到所有ISR中的replication的ACK后,增加HW(High Watermark,最后commit的offset)并向producer发送ACK。
LW是Low Watermark的缩写,俗称“低水位”,代表AR集合中最小的logStartOffset值,副本的拉取请求(FetchRequest,它有可能触发新建日志分段而旧的的被清理,进而导致logStartoffset的增加)
和删除请求(DeleteRecordRequest)都可能促使LW的增长。
LEO是Log End Offset的缩写,它表示了当前日志文件中下一条待写入消息的offset,如图offset为9的位置即为当前日志文件LEO,LEO的大小相当于当前日志分区中最后一条消息的offset值加1。
分区ISR集合中的每个副本都会维护自身的LEO,而ISR集合中最小的LEO即为分区的HW,对消费这而言只能消费HW之前的消息。
LSO特指LastStableOffset。它具体与kafka的事物有关。
四 、Data Replication何时Commit?
参考:
最新评论