本资料来源书籍《深入理解kafka核心设计与实践原理》
本资料来源书籍《深入理解kafka核心设计与实践原理》,属于个人理解记录
Kafka概念
基于zookpeeper协调的分布式系统,定位是分布流处理平台,饰演了三个角色
1.消息系统:除了常规消息中间件的功能外还提供了消息的有序性保障,和消费回溯功能
2.存储系统:kafka消息存储在磁盘中,可长期保存数据
3.流处理平台:提供可靠的数据来源,提供流处理类库
1.基本概念
kafka由若干个producer,若干broker,若干consumer,和一个zookeeper集群组成
producer用于生产消息发送到broker,broker-服务代理节点存储消息到磁盘,consumer负责消费信息从broker中订阅信息。zookeeper负责集群元数据的管理,控制器的选举。
2.1.主题 topic 和 分区partition:
主题是个概念性的东西,生产者发送消息是发送到指定的主题,消费者需要订阅指定主题进行消息获取,一个系统中可能有若干个主题
而分区是指在主题下还可细分多个分区,可将消息存储在不同的分区中,单个分区只属于一个主题,不能属于多个主题。
消息被追加到分区的时候 会分配一个特定的属性:偏移量 offset 用来保证消息的有序性,kafka的broker可以部署在不同的服务器上,分区可以横跨不同的服务器,也就是说一个主题不同的分区可以放在不同的服务器上,性能更加强大。
注意,消息被存放时是按顺序存放的
消息根据配置存放在不同分区,分区可在主题创建时设置数量。也可在主题创建后增加分区数量做到水平扩展。
2.2.kafka的replica受灾机制
分区有replica 的副本机制,一个分区可能存在多个副本,如果有三个分区,副本系数设置为3的值,则代表一个分区有三个副本,一个leader 主副本 两个follower 从副本,消费者和生产者只跟主副本进行互动,从副本只负责同步消息。很多时候从副本与主副本相比消息有一定的滞后性
具体副本的概念就不多做介绍了 简单就是
AR( Assigned Replicas ) = ISR(In-Sync Replicas) + OSR(Out-of-Sync Replicas )
转载一篇文章可以在这里看看详细的介绍,如果侵权麻烦告知删除
消费端也有一定的受灾能力,从broker消费消息的时候会在消费的地方保存消费的位置,当消费端宕机后会读取这个消费位置 重新拉取消息 不会造成数据的丢失
2.3 偏移量
HW - Watermark 是一个高水位,标识了一个特定的偏移量,消费者 consumer 只能获取这个偏移量之前的数据,下图HW设置偏移量值是6,那么消费者只能获取6之前的数据,LEO代表即将要插入的信息
LEO Log End Offset 缩写,它标识当前日志文件中下一条待写入消息 offset,6之后的数据对于用户都是不可见的,6,7,8…之后的数据会存入leader副本中, follower 副本会发送拉取请求来拉取6与6之后的数据进行消息同步
当所有副本的数据一致后HW和LEO的值会变成9,那么用户就可以读取上图中所有的数据了