消息队列-初识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>等参数 ),满足不同用户对于数据存储的需求。

:::

相关推荐
little_xianzhong5 小时前
关于对逾期提醒的定时任务~改进完善
java·数据库·spring boot·spring·mybatis
yuluo_YX5 小时前
Go Style 代码风格规范
开发语言·后端·golang
百锦再5 小时前
脚本语言的大浪淘沙或百花争艳
java·开发语言·人工智能·python·django·virtualenv·pygame
程序猿阿伟6 小时前
《云原生微服务治理进阶:隐性风险根除与全链路能力构建》
微服务·云原生·架构
小猪咪piggy6 小时前
【JavaEE】(23) 综合练习--博客系统
java·数据库·java-ee
周航宇JoeZhou6 小时前
JP4-7-MyLesson后台前端(五)
java·前端·vue·elementplus·前端项目·mylesson·管理平台
David爱编程6 小时前
从 JVM 到内核:synchronized 与操作系统互斥量的深度联系
java·后端
渣哥6 小时前
Java Set 不会重复?原来它有“记仇”的本事!
java
一叶飘零_sweeeet6 小时前
从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
java·数据库·mysql·数据库架构·分库分表