技术派消息队列Kafka(👍强烈推荐)
1、前言
1.1、什么是MQ
在正式开始分享Kafka之前,我想先讲讲MQ(Message Queue),它是消息队列,是一种FIFO(先进先出)数据结构。消息由生产者发送给MQ中进行排队,然后按照原来顺序交由消息的消费者进行处理。QQ和微信就是典型的MQ。其大致架构如下所示:
1.2、MQ优缺点
优点:
**异步:**异步提高系统响应速度、吞吐量;
**解耦:**方便系统更好扩展性;还能减少系统服务间的影响,提升维护性;
**削峰:**提升系统稳定性(能够更好的应对系统突发流量冲击)。
缺点:
系统可用性降低(MQ中间件一旦宕机那么就将出现问题);
系统复杂度提高(引入了中间件);
消息一致性问题(消息可能会出现丢失、延迟和重复消费等问题)。
2、Kafka介绍
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写, Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
2.1、Kafka的使用场景
- 日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种 consumer,例如hadoop、Hbase、Solr等。
- 消息系统:解耦和生产者和消费者、缓存消息等。
- 用户活动追踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到 hadoop、数据仓库中做离线分析和挖掘。
- 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
2.2、Kafka基本概念
kafka是一个分布式的,分区的消息(官方称之为commit log)服务。
首先我们来看看基础消息(Message)相关术语
| 名称 | 解释 |
| Broker | 消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群 |
| Topic | Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic |
| Producer | 消息生产者,向Broker发送消息的客户端 |
| Consumer | 消息消费者,从Broker读取消息的客户端 |
| ConsumerGroup | 每个Consumer属于一个特定的Consumer Group,一条消息可以被多个不同的Consumer Group消费,但是一个 Consumer Group中只能有一个Consumer能够消费该消息 |
| Partition | 物理上的概念,一个topic可以分为多个partition,每个 partition内部消息是有序的 |
因此,从更高的层面上来看,producer通过网络发送消息到kafka集群,然后consumber来进行消费,如下图所示:
服务端(brokers)和客户端(producer、consumer)之间通信通过TCP协议来完成。
**注意:**分区是patition,一个topic可以有多个patition分区,每个分区只能让其同一个消费组下的消费者消费,不能让同一个消费组下的多个消费者消费;但是一个消费者可以同时去消费多个分区;同一个topic下的patition可以分布在不同的Broker上;kafka的副本是存放在不同Broke上面,在创建主题设置副本数时应该小于等于Broke数。
3、Kafka下载安装
这里由于下载和安装比较简单,就不单独拿来给大家讲解了,下面给大家个链接,大家来按照他的步骤来进行下载和安装;如果大家在安装中有什么问题,可以直接艾特我或者在评论中留言。
《kafka下载与安装教程》,这一篇是安装的单节点的,其实已经足够我们自己测试使用;如果大家想安装多节点构成分布式集群的,可以使用这篇文章——《 kafka 下载安装》
注意:
1、一定要安装好JDK,因为Kafka是Scala语言开发的,它是运行在JVM上的。
2、一定要先启动Zookeeper;因为它是Kafka的注册中心。
**PS:**在这里我想再絮叨一句就是——这篇文章只是分享大家下载安装和使用,它其实还有很多概念与知识点这里没有覆盖,只是讲了大家常用的知识点,剩下的就需要大家课下进行补充了。
2、技术派中整合Kafka
上面讲到了Kafka具有这么多的优点,我们技术派中怎么能不去使用呢,下面就来引入我们的正文——技术派整合Kafka。
代码记得切到分支。

2.1、技术派使用Kafka背景
使用的背景是当我们对文章进行评论点赞、收藏、评论或者管理员用户发送系统消息的时候,那么对应的文章用户就可以实时的来接受到其消息。
在技术派中使用Kafka消息队列,能够使我们项目异步加速(只负责投递);服务解耦(投递消息和消费消息分开来,不用关心消息是否执行成功);拥有更好扩展性和维护性(例如可以直接扩展短信通知等等);
下面通过图例来讲解项目中的使用逻辑:

2.2、技术派集成Kafka生产者
生产者核心逻辑就是将消息投递至Kafka中,技术派中利用自定义注解在AOP切面中使用环绕通知将消息投递至Kafka中。
将消息投递至Kafka流程如下所示:

2.2.1、SpringBoot整合Kafka
1、引入Kafka依赖
org.springframework.kafka
spring-kafka
2.7.8
2、yml中配置Kafka
spring:
# kafka配置
kafka:
# kafka地址
bootstrap-servers: 124.222.0.1:9092
# 生产者
producer:
retries: 0
acks: 0
batch-size: 16384
buffer-memory: 33554432
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
# 消费者
consumer:
group-id: study_log
enable-auto-commit: true
auto-commit-interval: 100
# 这里offset设计的是latest
auto-offset-reset: latest
key-d...未能定位到原文的划线
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
1.2、MQ优缺点
回复