消息队列-初识kafka

优缺点

消息队列的优点:

  1. 实现系统解耦:

:::color5

系统解耦解释

有 MQ 时是 "服务 A 发消息到队列,其他服务从队列拿消息新增服务接队列 就行";无 MQ 时是 "服务 A 直接调其他服务的接口 / 依赖,新增 / 变更服务时 A 得改代码适配"(有 MQ 时服务间依赖弱,无 MQ 时依赖强、改动影响大)。

有mq:

没有mq:

:::

  1. 实现异步调用

:::color5

异步调用解释

有 MQ 的情况 服务 A 不需要等待服务 B、C、D 处理完任务才继续自己的工作。服务 A 只需把要处理的任务(消息)发送到 MQ 中,然后就可以立即去做其他事情了。而服务 B、C、D 会各自从 MQ 里获取任务,然后在后台异步地去处理这些任务,彼此之间互不干扰,实现了任务的异步执行。

没有 MQ 的情况 服务 A 调用服务 B、C、D 时,必须等待服务 B、C、D 把当前的任务处理完成,得到返回结果后,服务 A 才能继续进行后续的操作,整个过程是同步的,会造成服务 A 等待时间长,资源利用效率低。

与线程的区别:

  1. 适用范围:MQ 适用于跨服务 / 分布式场景,线程适用于单进程内部
  2. 耦合程度:MQ 实现服务解耦,线程间通常存在较强耦合

【因为mq生产者只需要关心消息发送,消费者只需要关心接受,耦合度不高,而线程通常在一个程序内部,共享内存等,如果一个线程的逻辑或接口发生变化,会影响到其他协作的进程】

  1. 可靠性:MQ 自带消息持久化,线程需额外处理数据安全
  2. 扩展性:MQ 可轻松横向扩展消费者,线程数量受系统资源限制

:::

  1. 流量削峰

缺点:

  1. 系统可用性降低【如果mq宕机了,那么服务就都宕机了】
  2. 提升系统的复杂度【中间件越多,系统越复杂】
  3. 数据一致性问题【与原生的相比,需要处理数据一致性问题】

消息队列的分类与选择

  • Kafka:分布式消息系统,性能高、支持多语言,分布式架构有副本机制,可靠性高,适合日志等场景,但队列 / 分区过多时负载和响应时间受影响,实时性依赖轮询间隔,消费失败不支持重试且社区更新慢。
  • RocketMQ:阿里开源,Java 实现,消息可靠性好,单机支持大量持久化队列,性能优、支持多种消费模式,分布式扩展好且版本更新快,但客户端语言支持少,社区成熟度及关注度不及 Kafka,无 Web 管理界面且未在核心实现 JMS 接口。
  • RabbitMQ:基于 AMQP 协议,性能好、支持高并发,健壮稳定、跨平台且支持多语言,有消息确认和持久化机制,路由高度可定制,管理界面丰富、社区活跃,但代理架构导致运行速度慢、消息封装大,学习和维护成本高。
  • ActiveMQ:Apache 出品,支持 JMS 规范和多语言,可通过 JDBC 持久化到数据库,有自动重连、错误重试和安全机制,监控完善、界面友好,但社区活跃度不如 RabbitMQ,存在消息丢失问题,对上千队列的场景不适用且对旧版本维护少。
  • ZeroMQ:类似 Socket 接口的传输层库,非传统消息队列服务器,可实现 N:M 通信,屏蔽 Socket 编程细节,让网络编程更简单,支持多种通信模型,目标是成为标准网络协议栈部分,但更偏向底层网络通讯库。

KafKa

基本介绍

安装and运行

安装Zookeeper

:::color5

ZooKeeper 是一个分布式协调服务

  • 元数据管理 :Kafka 依赖 ZooKeeper 存储和管理集群 的元数据信息,包括 Topic 的创建、删除,分区的分配情况,Broker 的注册信息等。比如当创建一个新的 Topic 时,Kafka 会将相关的 Topic 元数据存储在 ZooKeeper 中。
  • Broker 协调:ZooKeeper 负责监控 Kafka 集群中 Broker 的状态。当有 Broker 加入或离开集群时,ZooKeeper 会感知到变化,并通知其他相关组件。同时,在选举分区的 Leader 副本时,也需要借助 ZooKeeper 来保证选举的一致性和正确性,确保数据的读写操作能够正常进行。
  • 消费者组管理:对于 Kafka 的消费者组,ZooKeeper 记录了消费者组的成员信息、消费偏移量(Offset)等。当消费者组内成员发生变化(如新增消费者或消费者下线)时,ZooKeeper 会协助进行 Rebalance 操作,重新分配分区的消费任务,保证消费的均衡和高效。

:::

(kafka中也有自带的zookeeper,但这里也可以自己装一个)

KafKa配置介绍

安装and配置EFAK

:::color5

EFAK(Kafka Eagle)是一款开源的 Kafka 监控和管理工具,用于帮助用户更好地管理和监控 Kafka 集群,具体作用如下:

  • 集群管理 :可以同时管理多个 Kafka 集群,在配置文件(如<font style="color:rgb(0, 0, 0);">system - config.properties</font>)中通过设置<font style="color:rgb(0, 0, 0);">efak.zk.cluster.alias</font>来为不同的 Kafka 集群设置别名,指定每个集群对应的 ZooKeeper 连接地址(如<font style="color:rgb(0, 0, 0);">cluster1.zk.list=localhost:2181</font> ),方便用户对不同集群进行区分和操作。
  • 监控功能:实时监控 Kafka 集群的各项指标,比如 Broker 的状态、Topic 的消息堆积情况、消费者组的消费延迟等。通过直观的界面展示这些指标,让运维人员和开发者能够快速了解集群的运行状况,及时发现潜在问题。
  • 数据统计分析:提供对 Kafka 消息数据的统计和分析功能,例如统计某个 Topic 在一段时间内的消息生产和消费速率、消息总量等,帮助用户更好地理解业务数据的流动情况,为性能优化和容量规划提供依据。
  • 数据存储配置 :支持配置不同的数据库来存储监控数据,默认支持 SQLite,也可以配置 MySQL(通过修改<font style="color:rgb(0, 0, 0);">efak.driver</font><font style="color:rgb(0, 0, 0);">efak.url</font><font style="color:rgb(0, 0, 0);">efak.username</font><font style="color:rgb(0, 0, 0);">efak.password</font>等参数 ),满足不同用户对于数据存储的需求。

:::

相关推荐
小钻风33664 分钟前
Kafka 零基础实操命令大全
分布式·kafka
㳺三才人子11 分钟前
初探 Flask
后端·python·flask·html
星栈独行13 分钟前
我在 Rust 全栈项目里用 JWT 做无状态认证
开发语言·后端·rust·前端框架·开源·github·web
Lei活在当下21 分钟前
先用起来,再理解,关于协程Coroutine应该知道的事
android·java·jvm
Java爱好狂.38 分钟前
Java程序员体系化学习路线(2026最新版)
java·后端·java面试·java架构师·java程序员·java八股文·java学习路线
陈随易1 小时前
Redis 8.8发布,一定要更新
前端·后端·程序员
tongluowan0071 小时前
以ReentrantLock为例解释AQS的工作流程
java·模板方法模式·aqs·reentrantlock
装不满的克莱因瓶1 小时前
SpringBoot 如何将 lib 目录中jar包打包进最终的jar包里面
spring boot·后端·maven·jar·mvn
ltl2 小时前
Transformer 原论文实验结果:为什么 28.4 BLEU 足以改写路线图
后端
Curvatureflight2 小时前
【架构实战】生产级大模型 API 接入指南:流式响应(Streaming)异常处理与监控闭环
python·架构