这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
对于消息队列来说,在互联网的各种业务中发挥着至关重要的作用
消息队列 (MQ) 指保存消息的一个容器,本质是个队列。但这个队列呢,需要支持高吞吐,高并发,并且高可用
在整个程序运行的过程中,会出现以下几种情况:
-
系统奔溃
-
服务处理能力有限
-
链路耗时长尾
-
日志如何处理
解决方案:
1.解耦
(图片来自字节内部课)
2.削峰
3.异步
业界消息队列中间件的概况
2.消息队列-Kafka
使用场景
搜索服务 直播服务 订单服务 支付服务
如何使用?
- 首先需要创建一个Kafka集群
- 需要在这个集群中创建一个Topic,并且设置好分片数量
- 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法,发送hello word
- 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法
基本概念
- Topic: Kakfa中的逻辑队列,可以理解成每一个不同的业务场景就是一个不同的topic,对于这个业务来说,所有的数据者存储在这个topic中
- Cluster: Kafka的物理集群,每个集群中可以新建多个不同的topic
- Producer: 顾名思义,也就是消息的生产端,负责将业务消息发送到Topic当中
- Consumer: 消息的消费端,负责消费已经发送到topic中的消息
- Partition: 通常topic会有多个分片,不同分片直接消息是可以并发来处理的,这样提高单个Topic的吞吐
offset
对于每一个Partition来说,每一条消息都有一个唯一的Offset,消息在partition内的相对位置信息,并且严格递增
Replica
Leader对外服务,Follower异步去拉取leader的数据进行一个同步,如果leader挂掉了,可以将Replica: 分片的副本,分布在不同的机器上,可用来容灾,Follower提升成leader再堆外进行服务
SR:意是同步中的副本,对于Folower来说,始终和eader是有-定差的,但当这个差明以较小的时候,我们就可以将这oowe/本加入到SR中,不
在ISR中的副本是不允许提升成Leader的
架构图
流程未完待续(图片均来自字节内部课)