一个典型的 Kafka 体系架构包括若干 Producer、若干 Broker、若干 Consumer,以及一个ZooKeeper集群,如下图所示。其中ZooKeeper是Kafka用来负责集群元数据的管理、控制器的选举等操作的。Producer将消息发送到Broker,Broker负责将收到的消息存储到磁盘中,而Consumer负责从Broker订阅并消费消息。

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

主题(Topic)与分区(Partition)。Kafka中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到Kafka集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。
主题是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个主题,很多时候也会把分区称为主题分区(Topic-Partition)。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。offset是消息在分区中的唯一标识,Kafka通过它来保证消息在分区内的顺序性,不过offset并不跨越分区,也就是说,Kafka保证的是分区有序而不是主题有序。如果想主题有序,则只能采用不分区的方式。

AR:分区中的所有副本统称为AR(Sssigned Replicas)

ISR:所有与leader副本保持一定程度同步的副本(包括leader 副本在内)组成ISR(In-Sync-Replicas),可以得出一个结论,ISR集合是AR集合中的一个子集。

OSR:与ISR相对的是,所有与leader副本同步滞后过多的副本(不包括leader副本)组成OSR,由此可见,AR = ISR + OSR,但是在正常情况下,所有的follower副本都应该和leader副本保持一定程度的同步,即AR = ISR,OSR集合为空。

ISR和OSR的维护是由leader副本来负责维护和跟踪的,当ISR中follower副本落后太多或失效的时候,leader副本会把它从ISR中移除中,相反,如果OSR集合中follower副本追上了leader副本,那么leader副本就会把它从OSR集合中转移到ISR中。

HW(High Watermark):高水位,它标识了一个特定的消息漂移量(offset),消费者只能拉取到这个offset之前的消息。

LEO(Log End Offset):它标识当前日志文件中下一条待写入消息的offset,LEO的大小相当于当前日志分区最后一条消息的offset的值+1。分区ISR集合中的每个副本都会维护自身的LEO,而ISR中最小的LEO即为分区的HW,对消费者而言只能消费HW之前的消息。

Kafka的复制机制:Kafka 的复制机制既不是完全的同步复制,也不是单纯的异步复制。事实上,同步复制要求所有能工作的 follower 副本都复制完,这条消息才会被确认为已成功提交,这种复制方式极大地影响了性能。而在异步复制方式下,follower副本异步地从leader副本中复制数据,数据只要被leader副本写入就被认为已经成功提交。在这种情况下,如果follower副本都还没有复制完而落后于leader副本,突然leader副本宕机,则会造成数据丢失。Kafka使用的这种ISR的方式则有效地权衡了数据可靠性和性能之间的关系。
 

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐