Kafka原理及概念解释
1、zookeeper作用
zookeeper在kafka中扮演了重要的角色,kafka使用zookeeper进行元数据管理,保存broker注册信息,包括主题(Topic)、分区(Partition)信息等,选择分区leader,在低版本kafka消费者的offset信息也会保存在zookeeper中。
kafka在zookeeper上存储的brokers节点信息如下:
其中/brokers/ids/[0...n]
:是使用临时节点存储在线的是各个服务节点的信息,当下线后自动删除;
2、broker
可以简单理解集群节点,一个节点配置一个broker
但是单节点可以通过相同IP的不同端口号配置多个broker,其实就是伪集群
应用中broker的数量最好大于等于partition数量
3、主题(Topic)
Kafka 中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到 Kafka 集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。
主题是一个逻辑上的概念,它还可以细分为多个分区,
4、分区(Partition)
一个分区只属于单个主题,很多时候也会把分区称为主题分区(Topic-Partition)。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。
offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,也就是说,Kafka 保证的是分区有序而不是主题有序。
5、副本(replica) ---AR ----ISR ----OSR
Kafka 为分区引入了多副本(Replica)机制,通过增加副本数量可以提升容灾能力。
同一分区的不同副本中保存的是相同的消息(在同一时刻,副本之间并非完全一样),副本之间是“一主多从”的关系,其中 leader 副本负责处理读写请求,follower 副本只负责与 leader 副本的消息同步。副本处于不同的 broker 中,当 leader 副本出现故障时,从 follower 副本中重新选举新的 leader 副本对外提供服务。Kafka 通过多副本机制实现了故障的自动转移,当 Kafka 集群中某个 broker 失效时仍然能保证服务可用。
ISR
Kafka 为每个主题维护了一组同步副本集合in-sync replicas
(其中包含 leader 副本)。
只有被 ISR 中的所有副本都接收到的那部分生产者写入的消息才对消费者可见,这意味着 ISR 中的所有副本都会与 leader 保持同步状态。
为了避免出现新 leader 数据不完整导致分区数据丢失的情况,只有 ISR 中 follower 副本才有资格被选举为 leader。
OSR
与leader副本同步滞后过多的副本(不包括leader副本)组成OSR(Out-of-Sync Replicas)
6、leader follower
以下三张图皆体现的多分区多副本的leader\follower
生产者和消费者只与 leader 副本进行交互,而 follower 副本只负责消息的同步,很多时候 follower 副本中的消息相对 leader 副本而言会有一定的滞后。
7、消费者组
组内的消费者共享一个topic
组内一个消费者、消息多分区:一个消费者一起消费当前topic的所有分区
组内多个消费者、消息多分区:多个消费者一起消费当前topic的所有分区(根据分配原则)
组内多个消费者、消息单分区:多个消费者一起消费当前topic的所有消息
组内一个消费者、消息单分区:一个消费者消费当前topic的所有消息、并且永远有序