多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 名词 无论是kafka集群还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性 * Topic :消息根据Topic进行归类 * Producer:发送消息者 * Consumer:消息接受者 * broker:已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker). 消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。 * Zookeeper:依赖集群保存meta信息 * Consumer Group (CG):这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic * Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序,partition是有主从概念的,主partition负责写入数据和读取数据 * Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka * segment:每个partition在broker中是一个文件夹,文件夹中有很多segment用来保存数据.好处在于删除历史数据时方便快捷 ![](https://box.kancloud.cn/0693942d4ce4eda7acc6b210bef4edb8_323x223.png) # 核心API * Producer API 发布消息到1个或多个topic(主题)。 * Consumer API 来订阅一个或多个topic,并处理产生的消息。 * Streams API 充当一个流处理器,从1个或多个topic消费输入流,并生产一个输出流到1个或多个输出topic,有效地将输入流转换到输出流。 * Connector API允许构建或运行可重复使用的生产者或消费者,将topic连接到现有的应用程序或数据系统。例如,一个关系数据库的连接器可捕获每一个变化 # 架构 ![](https://box.kancloud.cn/04c90d5f13087558e5c315ddd1717e92_945x461.png) 1. Producer :消息生产者,就是向kafka broker发消息的客户端; 2. Consumer :消息消费者,向kafka broker取消息的客户端; 3. Topic(主题) :可以理解为一个队列。属于特定类别的消息流称为主题,数据存储在主题中,主题被拆分成分区,每个这样的分区包含不可变有序序列的消息。分区被实现为具有相等大小的一组分段文件。 4. Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic; 5. Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都    会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序; 6. Partition offset(分区偏移):kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka。 7. Replicas of partition(分区备份),副本只是一个分区的备份。 副本从不读取或写入数据。 它们用于防止数据丢失。 8. Consumer Group (CG):这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic **注意** * 同一个消费组同时只能有一个消费者消费消息 * 同一个消费组中的消费者不会重复消费 * 一个分区的数据可以被2个不同的消费者消费,但是需要在不同的消费者组中