kafka基础概念

329 阅读2分钟

参考资料:

ps:其实参考资料已经写得非常清晰,但是为了避免“一看就会,一做就懵”的情况,还是写篇笔记

知识点预览:

image-20210114164311396

基础概念

生产者、消费者

这个好解释,谁投递消息到队列,谁就是生产者;谁从队列读取消息,谁就是消费者。

image-20210114164458726

topic

一个消息中间件,肯定会存在很多队列,我们给队列起个专业点的名字,叫做topic,也就是主题。

image-20210114164651014

一个主题可以被多个生产者投递信息,多个消费者读取消息。

image-20210114164810203

partition

partition,也就是分区。为了提高一个队列的吞吐量,kafka会把topic进行分区,即一个主题包含多个分区。所以,实际上主题是个虚拟的概念,消息真正存储在分区。

image-20210114164942993

image-20210114165214948

broker

这个也很好理解,一台kafka机器就是一个broker,kafka集群就是多台kafka机器。

image-20210114165328243

消费组

消费组由多个消费者组成,用于消费同一个topic下多个分区,每个消费者负责一个或多个分区,主要是为了提高系统吞吐量。

image-20210114171112324

偏移量

由于一个topic可能被多个消费者订阅,为了记录消费者已读取消息的位置,partition会给每个消费组记录一个偏移量。

image-20210114171543611

partition的分布

同一个主题(topic)的分区(partition)是可以分布在不同的broker上的。但是,partition分为主分区和备份分区,生产者和消费者只和主分区交互,备份分区仅仅是数据备份,不参与读写。为了保证高可用,一个broker不仅保存本服务器的主分区消息,还会保存其他备份分区的消息。因此,一个broker包含一个topic所有的分区消息。

举个栗子:现在有个topic,有三个分区,分别部署在三台机器上,机器A有分区1,机器B有分区2,机器C有分区3,这些分区在自己的机器上都是主分区。为了保证高可用,机器A上还有备份分区2和备份分区3,同理,机器B上有备份分区1和备份分区3

ps:主分区和备份分区,准确点,应该叫leader副本和follower副本

image-20210114170339448

持久化

生产者把消息投递到partition后,为了防止数据丢失,需要将消息持久化到磁盘。kafka通过顺序写入的方式,避免缓慢的IO操作。通常是先往缓存写入,等待一定时间或超过一定数量再批量刷新(flush)

注意:消息被消费后是不会删除的,除非设置过期时间和指定文件大小