消息队列一 | 青训营笔记

59 阅读2分钟

消息队列一

day2

场景带入

1.系统崩溃

2.服务处理有限

3.链路耗时长

4.日志如何处理

怎么办?

解决方案:解耦,削峰,异步

那么谁可以呢?

那就是MQ啦,支持高吞吐,高并发,高可用的消息队列

常用消息队列

Kafka

使用场景:

日志信息,Metrics数据,用户行为等

如何使用:

创建集群->新增Topic->编写生产者逻辑->编写消费者逻辑

20230602220747.png 基本组成:

20230603155855.png

Topic:逻辑队列,不同Topic可以建立不同的

Topic Cluster:物理集群,每个集群中可以建立多个不同的

Topic Producer:生产者,负责将业务消息发送到Topic中

Consumer:消费者,负责消费Topic中的消息

ConsumerGroup:消费者组,不同组

Consumer消费进度互不干涉

简单来说就是生产者将消息发送给逻辑队列(即消息队列主体),然后消息队列将消息发给消费者,消费者组就相当于消费者的集群,用来消费类消息。

具体架构:

20230603160822.png

zookeeper是一个注册中心,具体作用如上图

从一个消息的视角看看为什么kafka能支撑这么多吞吐

producer:批量发送,进行数据压缩,减小消息大小

broker:进行顺序写,以提高写入效率,寻找索引的用了二分的思想,

发送给consumer时采用了零拷贝技术,使得其减少了用户态与内核态之间的切换减少了开销

20230603161839.png

在consumer上,采取了一个coordinator的机制,实现了自动的Rebalance操作

kafka的弊端:

1.运维成本高

2.对于负载不均衡的场景,解决方案复杂

3.没有自己的缓存,完全依赖Page Cache

4.Controller 和Coordinator和Broker在同一进程中,大量IO会造成其性能下降

小结

今天主要学习了消息队列出现的原因以及kafka的相关知识,课上讲了kafka的整体架构以及一些细节,之前有学过关于消息队列的相关知识也了解过一些,但有些内容还是有点难懂,没有搞清楚。但是收获蛮多的,学习了一些新的名词,以及有种“原来还有这种操作”的感觉。以后还要多多学习相关知识,一是有用,二是学的东西还不够多以至于课程内容没有完全搞懂。