「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」。
-
什么是消息队列?
- A系统发消息给B系统,不会直接发送过去,而是直接发给消息队列,消息队列进行缓存。
- 消息队列分为一对多推送订阅模式。也分为一对一,消费者主动拿去数据模式。
-
为什么需要消息队列,优点是什么?
- 解耦
- 灵活性,和峰值处理能力。可以应对大量的并发请求
- AB系统故障了,不会导致队列的消息丢失
- 缓冲
- 异步通讯,就是我A消息发出去,不想B马上处理,也就是放入队列中,消费者想什么时候消费就什么时候消费。
-
kafka基本架构就是
生产者、kafka集群,消费者。 进一步看他的结构: kafka实例 broker,
-
topic是存数据的,可以认为是数据库中的一张表
-
同一个topic的消息可分布在多个节点broker上
-
一个topic包含一个或者多个partition
-
每条消息都属于且仅属于一个topic
-
下图我们可以看到几个点:
- 同一个topic可以在多个broker中,这个是对的,集群嘛,就是这样
- 但是多个broker中相同的topic的partition是不会一样的
- 多个broker相同topic的partition是均匀分布的
-
Partition
- 一个partition只分布在一个broker中
- 一个partition物理是一个文件夹,理解为一个队列:实际的我们去看kafka的日志文件,就会发现有多少个partition就有多少个文件夹,名字是topic1-0......。
- 一个partition包含多个segment
- 一个segment对应一个文件,这个文件的名字就是offset
- segment是从后追加记录(AOF也是)
kafka的过期时间默认168小时,如果超过,就会删除segment文件。策略也有是按大小来删除。