Kafka - 多分区、多副本的基于ZooKeeper协调的分布式消息系统

主要功能包括:

  • 消息系统:系统解耦、冗余存储、削峰、缓冲、异步通信、扩展性和可恢复性
  • 存储系统:Kafka将消息持久化到磁盘
  • 流处理

Kafka的基本组成

  • Producer,消息的生产者
  • Consumer,消息的消费者
  • Broker,可以将一个Kafka实例看作一个Broker
  • ZooKeeper,负责集群元数据的管理、控制器的选举等操作

重要概念 - 主题

Kafka中的消息以主题为单位进行归类,生产者将消息发送到特定的主题,消费者订阅主题进行消息消费

重要概念 - 分区

每个主题下又分为多个分区,同一主题下的各个分区的消息是不同的。

分区,在存储方面可以被看做为一个可追加的日志文件,消息在被追加到分区之后,会附带一个特定的offset(消息在分区中的唯一标识),Kafka通过offset来保证消息的顺序性,但是offset不会跨分区

分区可以跨Broker,即主题是可以跨Broker的,消息在被发送到Broker之前会根据分区规则来决定存储到哪个分区中。

分区的多副本机制

通过多副本机制,能够提高容灾能力。副本分为Leader副本和Follower副本,为“一主多从”模式,其中Leader副本主要用于读写消息,而Follower副本只负责与Leader副本保持消息同步。

副本位于多个Broker中,当Leader副本出现故障时,会从Follower副本中重新选举新的Leader副本对外提供服务,这就是Kafka的故障转移

Kafka消费端的容灾能力

Consumer使用Pull的方式来拉取消息,同时会保存消费的具体位置,当Consumer宕机后恢复上线时可以根据之前保存的消费位置重新拉去需要消费的信息进行消费,这样就不会造成消息的丢失

副本

  • AR(Assigned Replicas):分区中所有的副本
  • ISR(In-Sync Replicas):与Leader副本保持一定程度同步的副本
  • OSR(Out-Sync Replicas):与Leader副本消息滞后过多的副本

AR = ISR + OSR

消息首先会被发送到Leader副本,接着Follower副本才能从Leader副本中拉取消息进行同步。

当Leader副本发生故障时,会从Follower副本中选举出新的Leader副本,但是只有ISR集合中的副本能够被选举为Leader副本

HW

High WaterMark,消费者最多能拉取到HW之前的消息

LEO

LogEndOffset,当前日志文件中下一条待写入消息的offset