一个典型的 Kafka 体系架构中包括:若干 Producer 、若干 Broker、若干 Consumer、ZooKeeper集群。

Producer 将消息发送到 Broker, Broker 将收到的消息存储到磁盘中,而 Consumer 负责从 Broker 订阅并拉取消息进行消费。

1.生产者(producer)

生产者就是生产并发送消息的一方,负责创建消息并投递到 Kafka 中。

2.服务代理节点(broker)

对于 Kafka 来说,Broker 可以看成是一个独立的 Kafka 服务节点或 Kafka 服务实例。一个或多个 Broker 组成了一个 Kafka 集群。一般而言, 我们更习惯使用首字母小写的 broker 来表示服务代理节点。

2.1主题(topic)

Kafka 以主题为单位对消息进行分类。

发送到 Kafka 集群中的每一条消息都要指定一个主题,由生产者负责将消息发送到特定的主题,而消费者负责订阅相应主题并进行消费。

2.1分区(partition)

主题是一个逻辑上的概念,为了方便扩展和提高吞吐量,一个主题可以分为多个分区,同一个主题下的不同分区里的消息是不同的。

消息被追加到分区日志文件的时候都会分配一个特定的偏移量(offset) ,offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨分区,也就是说 Kafka 保证的是一个分区内有序而不是一个主题内有序。

2.2副本(Replica)

同一分区的副本中保存的消息是相同的,但是在同一时刻,副本之间的消息并非完全一样。

为了保证分区的可用性,副本之间是一主多从的关系,分为 leader 和 follower,leader 负责进行请求读写,follower 副本只负责进行 leader 副本中的消息同步,leader挂了之后,follower 进行选举,选出新leader。

3.消费者(consumer)

消费者就是接收消息的一方,负责连接到 Kafka 上并拉取消息,进而进行业务逻辑处理。

3.1消费者组

配合分区的设计,出现消费者组的概念,组内每个消费者并行消费,便于管理,一个分区内的数据只能由一个消费者进行消费,不然不利于区分哪个消费者消费了这个分区的数据

4.ZooKeeper

Kafka 用 ZooKeeper 来管理集群元数据,比如:记录谁是 leader,但是 Kafka2.8.0 之后也可以配置不采用zk,因为 Kafka内置了 zk 的替代品。

待更新