Kafka概述
Kafka-核心架构-分区
Kafka的分区是将数据在主题(Topic)中逻辑上划分成多个片段的机制。
分区使得数据可以被水平扩展,进步了Kafka的可伸缩性和吞吐量,并允许数据在集群中分布和并行处理。
1.Kafka 分区的作用
(1)数据分布和负载均衡:
- Kafka通过将数据分割成多个分区并在集群中分布这些分区来实现数据的水平扩展和负载均衡。
- 每个分区可以在集群中的不同节点上举行复制,从而进步了容错性。
(2)并行处理:
- 每个分区在不同的消费者实例中可以并行处理,这进步了系统的吞吐量和性能。
(3)顺序保证:
- Kafka保证每个分区内的消息顺序,即在同一个分区内,消息的顺序是有序的。
- 但是在不同分区之间,消息的顺序不做保证。
2.Kafka 分区的管理
(1)创建和删除:
- 可以使用kafka-topics.sh命令创建和删除主题时指定分区数目,从而创建或删除分区。
(2)动态调解:
- Kafka允许在运行时动态地调解分区数目,但这大概会影响消息的分布和顺序,必要审慎操作。
(3)分区分配策略:
- Kafka提供了多种分区分配策略,如轮询、随机等,用于将分区分配给消费者组中的消费者,以实现负载均衡和最优分配。
(4)分区副本:
- 每个分区都有多个副本,副本的数目可以通过配置指定,副本之间会根据配置的复制策略举行数据同步,以进步数据的可靠性和持久性。
(5)分区Leader和副本:
- 每个分区都有一个Leader副本,负责处理该分区的全部读写哀求,而其他副本则作为Follower副本,从Leader副本同步数据,以实现高可用和故障转移。
Kafka-核心架构-副本
Kafka的副本(Replicas)是指在分区(Partition)级别对数据的冗余备份。每个分区可以配置多个副本,副本之间存储的是雷同的数据。
1.Kafka 副本的作用
(1)数据冗余和容错性:
- Kafka 使用副本机制来确保数据的冗余存储和容错性。
- 每个分区可以配置多个副本,这些副天职布在不同的 Broker 节点上,一旦某个节点出现故障,系统可以从其他副本中继续提供服务,保证数据不丢失。
(2)进步读取性能:
- 副本可以分布在不同的节点上,允许客户端从最近的副本读取数据,这样可以低落读取延迟并进步读取吞吐量。
(3)进步写入吞吐量:
- Kafka 允许将写入哀求发送给 Leader 副本,而且异步地将写入操作复制到 Followers 副本。
- 这样可以在保证数据持久性的条件下进步写入吞吐量。
(4)故障转移:
- 当 Leader 副本所在的节点发生故障时,Kafka 可以从副本中选择一个新的 Leader 副原来继续服务,从而实现故障转移,保证系统的可用性。
2.Kafka 副本的特性
(1)Leader 和 Followers:
- Kafka中副天职为:Leader和Follower。
- Kafka生产者只会把数据发往Leader,然后Follower找Leader举行同步数据。
- 每个分区都有一个 Leader 副本和零个或多个 Followers 副本。
- Leader 副本负责处理读写哀求,而 Followers 副本 则从 Leader 副本同步数据。
(2)数据同步:
- Leader 副本会将写入操作异步地复制到 Followers 副本,一样平常情况下,写入操作在 Leader 副本成功提交后就会被复制到 Followers 副本,从而保证数据的一致性。
(3)ISR(In-Sync Replicas):
- ISR 是指与 Leader 副本保持同步的 Followers 副本集合。
- 假如某个副本落后于 Leader 副本太多,将会被从 ISR 中移除,直到其追赶上 Leader 副本的进度。
(4)AR(Assigned Repllicas)。
- AR = ISR + OSR。
- OSR,表现Follower与Leader副本同步时,延迟过多的副本。
(5)默认副本
- Kafka默认副本 ,生产情况一样平常配置为2个,保证数据可靠性;
- 太多副本会增加磁盘存储空间,增加网络上数据传输,低落服从。
3.Kafka副本推举
Kafka集群中有一个broker的Controller会被推举为Controller Leader,负责管理集群broker的上下线,全部topic的分区副天职配和Leader推举等工作。
Controller的信息同步工作是依靠于Zookeeper的。
当 Leader 副本发生故障时,Kafka 集群会从 ISR 中选择一个副本作为新的 Leader 副本,以保证分区的可用性。
这个过程是自动举行的,由 Kafka 控制器(Controller)负责实行。
下面是副本推举的步调:
(1)向导者副本失效检测:
Kafka 集群中的每个节点都会监视分区的向导者副本的状态。假如向导者副本失效,即无法响应哀求或已经停止工作,节点会检测到这一情况。
(2)副本选择:
- 在向导者失效后,控制器会从 ISR(同步副本集合)中选择一个副本作为新的向导者。ISR 中的副本是与向导者保持同步状态的副本,它们的数据与向导者的数据是一致的。
- 通常情况下,新的向导者会从 ISR 中选择。这是由于 ISR 中的副本与向导者保持同步,可以更快地接受向导者的角色,而不必要举行数据同步。
- 推举规则:在ISR(与 Leader 副本保持同步的 Followers 副本集合)中存活为条件,按照AR(Assigned Repllicas)中排在前面的优先。例如ar[1,0,2],isr[1,0,2,那么leader就会按照1,0,2的顺序轮询。
(3)副本推举通知:
- 一旦控制器选择了新的向导者副本,它会将这一信息通知给集群中的全部节点。
(4)推举结果确认:
- 全部节点接收到新向导者的推举通知后,它们会更新当地的分区信息,将新的向导者副本标记为向导者,并更新其角色状态。
(5)客户端重定向:
- 一旦新的向导者推举完成,Kafka 控制器会将分区的元数据更新到 Zookeeper(大概最新版本的 Kafka 使用自己的元数据存储),并通知客户端有关向导者副本的更改。
- 客户端在收到更新后,会将哀求重定向到新的向导者副本,确保数据的一连性和可用性。
4.Leader和Follower故障处理细节
Follwer:
Leader:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |