跳至主要內容
Kafka - 1

MQ(消息队列)

MQ:MessageQueue,消息队列

队列,是⼀种FIFO 先进先出的数据结构,消息则是跨进程传递的数据

⼀个典型的MQ系统,会将消息消息由生产者发送到MQ进行排队,然后根据一定的顺序交由消息的消费者进行处理

作用主要包括

  • 异步

    可以提高系统的响应速度、吞吐量

  • 解耦

    服务之间进行解耦,才可以减少服务之间的影响,提高系统整体的稳定性以及可扩展性

    另外,解耦后可以实现数据分发。生产者发送一个消息后,可以由一个或者多个消费者进行消费,并且消费者的增加或者减少对生产者没有影响

  • 削峰

    在流量冲击比较大的场景时,前端大量请求发送可以在MQ中存起来,而下游的消费者按照自己的速度稳定从队列里获取任务执行,避免后端服务被大流量冲垮的情况


code中间件Kafka大约 14 分钟
Kafka - 2 客户端工作机制1

客户端工作机制

其实Kafka的设计精髓,是在网络不稳定,服务也随时会崩溃的这些作死的复杂场景下,如何保证消息的高并发、高吞吐,那才是Kafka最为精妙的地方。但是要理解那些复杂的问题,都是需要建立在这个基础模型基础上的

消费者分组消费机制

GROUP_ID_CONFIG

​在Consumer中,都需要指定一个 GROUP_ID_CONFIG 属性,这表示当前Consumer所属的消费者组

对应的 ConsumerConfig 对应的配置


code中间件Kafka大约 21 分钟
Kafka - 3 客户端工作机制2

客户端工作机制2

生产者消息缓存机制

目前已经分析了消费者组、消息发送和接受时的序列化和反序列化,以及具体消息发送是到哪个partition和consumer接受哪个partition的消息

接下来就是如何具体发送消息了

​Kafka生产者为了避免高并发请求对服务端造成过大压力,每次发消息时并不是一条一条发往服务端,而是增加了一个高速缓存,将消息集中到缓存后,批量进行发送。这种缓存机制也是高并发处理时非常常用的一种机制

Kafka的消息缓存机制涉及到KafkaProducer中的两个关键组件: accumulatorsender


code中间件Kafka大约 22 分钟
Kafka - 4 Spring集成Kafka

SpringBoot集成Kafka

简单使用

对于Kafka,你更应该从各个角度建立起一个完整的数据流转的模型,通过这些模型去回顾Kafka的重要设计,并且尝试去验证自己的一些理解。这样才能真正去理解Kafka的强大之处。

​当你掌握了Kafka的核心消息流转模型时,也可以帮助你去了解Kafka更多的应用生态。比如SpringBoot集成Kafka,其实非常简单。就分三步

在SpringBoot项目中,引入Maven依赖

<dependency>
  <groupId>org.springframework.kafka</groupId>
  <artifactId>spring-kafka</artifactId>
</dependency>

code中间件Kafka大约 7 分钟