kafka的架构介绍和内部细节剖析
目录
一 、kafka的架构介绍
1、生产者API
允许应用程序发布记录流至一个或者多个kafka的主题(topics)。
2、消费者API
允许应用程序订阅一个或者多个主题,并处理这些主题接收到的记录流。
3、StreamsAPI
允许应用程序充当流处理器(stream processor),从一个或者多个主题获取输入流,并生产一个输出流到一个或 者多个主题,能够有效的变化输入流为输出流。
4、ConnectAPI
允许构建和运行可重用的生产者或者消费者,能够把kafka主题连接到现有的应用程序或数据系统。例如:一个连接到关系数据库的连接器可能会获取每个表的变化。
二、kafka架构内部细节剖析
说明:kafka支持消息持久化,消费端为拉模型来拉取数据,消费状态和订阅关系有客户端负责维护,消息消费完后,不会立即删除,会保留历史消息。因此支持多订阅时,消息只会存储一份就可以了。
- Kafka生态系统四大角色,生产者(Producer)、kafka集群(Broker)、消费者(Consumer)、zookeeper
- 每个消费者都必须属于一个消费组,一个组内的消费者可以多个。
- 一个Topic可以有1到多个多个分区(Partition)
- 一个分区可以有1到多个segment。
- 每个segment可以有由一个log和一个index组成。
- 被复制的分区叫做主副本(Leader),复制出来的叫做从副本(Follower)
- 生产者只往主副本写数据,消费者只在主副本拉取数据。
- 从副本只做数据备份,不做数据读写。
- 一个分区内的一条数据,只能被一个消费组内的一个消费者消费。
- 消费者的最大并发度由topic的分区数量决定
- 分区副本的数量必须小于等于broker的数量
- 一个topic内的多个分区,每个分区只是所有数据的一部分。所有分区的数据累加到一起是这个topic的全部数据。
- zookeeper中记录了broker的id 、消费者消费数据的offset,消费者与partition的对应关系(ConsumerA—> Partition-0, ConsumerB—> Partition-1)