1. 基本概念

一个kafka集群包含若干的Producer、若干Broker、若干的Consumer,以及一个Zookeeper集群。Zookeeper是负责Kafka元数据管理、控制器选举等操作的。Producer将消息发送到Broker,Broker将消息存储都磁盘,Consumer从Broker订阅并消费消息。

kafka和zookeeper的区别 kafka的zookeeper是什么_java

Kafka体系中引入了一下三个术语。
(1) Producer:生产者,也就是发送消息的一方。生产者负责创建消息,然后将其投递到Kafka中。
(2) Consumer:消费者,也就是接收消息的一方。消费者连接到Kafka上并接收消息,进而进行相应的业务逻辑处理。
(3) Broker:服务代理节点。对于Kafka而言,Broker可以简单地看作一个独立的Kafka服务节点或Kafka服务实例。大多数情况下也可以将Broker看作一台Kafka服务器,前提是这台服务器上只部署了一个Kafka实例。一个或多个Broker组成了一个Kafka集群。一般而言,我们更习惯使用首字母小写的broker来表示服务代理节点。

在Kafka中还有两个特别重要的概念 ------ 主题(Topic)与分区(Partition)。主题可理解为一系列消息的集合,生产者向主题里面发送消息,消费者则订阅并消费主题中的消息。一个主题包含多个分区,同一个主题下分区包含消息是不同的,可以理解为将一个队列拆成了两个队列。

这里还有一个偏移量(offset)的概念,offset是分区中消息的唯一标识,注意:offset是不跨分区的。

kafka和zookeeper的区别 kafka的zookeeper是什么_服务器_02

每一条消息被发送到broker之前,会根据分区规则确定存储到哪一个分区,如果分区规则合理的话,消息会均匀的写入每一个分区。如果一个主题只有一个分区的话,那么这个文件所在的机器I/O会成为这个主题的瓶颈,而分区解决了这个问题。

Kafka为分区引入了副本(Replicas)机制,增加副本个数提升容灾能力。副本之间是"一主多从"的关系,leader负责读写,follower负责与leader的消息同步。leader失效时,从follower中选举一个成为leader继续提供服务。多副本机制实现了故障自动转移,保障某个broker失效时集群任然能继续使用。

分区中的所有副本统称为AR(Assigned Replicas)。所有与leader副本保持一定程度同步的副本(包括leader副本在内〕组成ISROn-Sync Replicas) 。与leader副本同步滞后过多的副本(不包括leader副本)组成OSR(Out-of-Sync Replicas)。由此可见,AR=ISR+OSR。在正常情况下,所有的follower副本都应该与leader副本保持一定程度的同步,即AR=ISR,OSR集合为空。

HW是HighWatermark的缩写,俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个offset之前的消息。

kafka和zookeeper的区别 kafka的zookeeper是什么_服务器_03

LEO是LogEnd Offset的缩写,它标识当前日志文件中下一条待写入消息的offset。

kafka和zookeeper的区别 kafka的zookeeper是什么_kafka_04


kafka和zookeeper的区别 kafka的zookeeper是什么_分布式_05


kafka和zookeeper的区别 kafka的zookeeper是什么_分布式_06


kafka和zookeeper的区别 kafka的zookeeper是什么_kafka_07


通过上面几幅图

①:生产者将3、4写入leader

②:消息写入leader,follower进行同步

③:follower同步中,可能由于网络或者其他问题,导致消息同步滞后。

④:消息同步完成后,HW = LEO