1. 简介
介绍 Kafka 的概述、优势和劣势,以及应用场景。
2. 基本概念
2.1 架构
一个典型的 Kafka 体系架构包括若干 Producer、若干Broker、若干 Consumer,以及一个ZooKeeper集群。
- ZooKeeper是Kafka用来负责集群元数据的管理、控制器的选举等操作的。Kafka通过ZooKeeper来实施对元数据信息的管理,包括集群、broker、主题、分区等内容。
- Producer将消息发送到Broker,Broker负责将收到的消息存储到磁盘中。
- 而Consumer负责从Broker订阅并消费消息。
- Broker:服务代理节点。对于Kafka而言,Broker可以简单地看作一个独立的Kafka服务节点或Kafka服务实例。大多数情况下也可以将Broker看作一台Kafka服务器,前提是这台服务器上只部署了一个Kafka实例。一个或多个Broker组成了一个Kafka集群。
2.2 Topic和Partition
Kafka中的消息以Topic为单位进行归类,生产者负责将消息发送到特定的Topic(发送到Kafka集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。
Topic是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个Topic,很多时候也会把分区称为主题分区(Topic-Partition)。同一Topic下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。offset是消息在分区中的唯一标识,Kafka通过它来保证消息在分区内的顺序性,不过offset并不跨越分区,也就是说,Kafka保证的是分区有序而不是主题有序。
从Kafka的底层实现来说,主题和分区都是逻辑上的概念,分区可以有一至多个副本,每个副本对应一个日志文件,每个日志文件对应一至多个日志分段(LogSegment),每个日志分段还可以细分为索引文件、日志存储文件和快照文件等。
2.3 AR、ISR、OSR
分区中的所有副本统称为AR(Assigned Replicas)。所有与leader副本保持一定程度同步的副本(包括leader副本在内)组成ISR(In-Sync Replicas),ISR集合是AR集合中的一个子集。消息会先发送到leader副本,然后follower副本才能从leader副本中拉取消息进行同步,同步期间内follower副本相对于leader副本而言会有一定程度的滞后。前面所说的“一定程度的同步”是指可忍受的滞后范围,这个范围可以通过参数进行配置。与leader副本同步滞后过多的副本(不包括leader副本)组成OSR(Out-of