这是我参与「第五届青训营」伴学笔记创作活动的第12天
kafka定义 传统定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。
最新定义:一个开源的分布式事件流平台,可应用于高性能数据通道、流分析、数据集成、关键任务应用
传统MQ的应用场景:缓存/消峰、解耦、异步通信。
kafka的相关名词解析 Broker:一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个broker 可以容纳多个 topic。
Topic:可以理解为一个队列,生产者和消费者面向的都是一个 topic。
Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服 务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。
Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数 据的对象都是 Leader。
Follower:每个分区多个副本中的“从”,实时从 Leader 中同步数据,保持和Leader 数据的同步。Leader 发current-offset:当前消费组的已消费偏移量
Log-end-offset:主题对应的分区消息的结束偏移量
Lag:当前消费组未消费的消息数
主题和分区的概念
tiopic主题:kafka逻辑的概念。kafka通过topic将消息进行分类。不同topic会被订阅该topic的消费者消费;如果topic中的消息很多,需要几T来保存。为了解决文件过大的问题,提出了partition的概念
partition分区:
- 分区存储可解决文件过大的问题;
- 可以提高读写的吞吐量,读写可以在多个分区中同时进行
kafka中的/usr/local/kafka/data/目录中 - 有个index文件,是稀疏索引的作用。
- 000.log是保存的消息
- _consumer_offsets_0到_consumer_offsets_49等:创建了50个分区,用来存放消费者消费某个主题的偏移量
- 同一个消费组中有一个消费者在消费的过程中会将偏移量提交到_consumer_offsets(key是consumerGroupId+topic+分区,value是偏移量的值),当这个消费者意外挂掉了,在该组中新启动的消费者会在这个topic中找到已经消费的偏移量然后继续消费
- 由于_consumer_offsets可能接收高并发请求,kafka默认分配给这50个分区,分配机制是:哈希算法
- 文件中保存的消息默认保存7天。
副本概念的介绍
在创建主题的时候除了指明主题的分区数以外,还创建了副本。
副本是为了主题中的分区创建多个备份,多个副本在kafka集群中的多个broker中,会有一个副本作为leader,其他的是follower。
leader:kafka的读写操作都发生在leader上
follower:接收leader的同步数据。
isr:可以同步的broker节点和已同步的broker节点,存放在isr中。作用:当leader挂了,新选的leader会在isr集合中产生。如果isr中的节点性能较差会被踢出isr集合中
集群消息的发送和消费
关于分区消费组消费者的细节
集群中有多个broker,每个broker有多个partition,一个partition只能被一个消费组的某一个消费者消费;一个消费组中的一个消费者可以消费多个partition的。
kafka只能保证partition的范围内保证消息消费的局部顺序性,但是不能保证一个topic中多个partition的消费顺序性