【中间件】 Kafka

ops/2025/2/8 0:23:16/

1.先导知识:

  • 消息队列MQ(Message Queue):    将需要传输的数据临时(设置有效期)存放在队列中,进行存取消息
  • 消息队列中间件: 用来存储消息的中间件(组件)

2.消息队列的应用场景

  • 异步处理

    • 为什么要使用消息队列?
      • 比较耗时的操作放在其他系统中,通过消息队列将需要处理的消息进行存储,其他系统可以消费消息队列中的数据
    • 案例: 用户注册,后端一方面需要保存用户信息;另一方面需要发送短信,发送邮箱等需要连接第三方服务,需要额外等待一段时间
    • 常见的异步处理:
      • 下载报表
  • 系统解耦

    • 为什么要使用消息队列?
      • 原先一个微服务调用接口去调用另一个微服务,耦合比较严重,只要接口发生变化就会导致系统不可用。使用消息队列可以进行解耦,第一个微服务可以将消息放入到消息队列,另外一个微服务去处理。
    • 案例:系统之间的依赖即耦合度
  • 流量削峰       

    • 为什么要使用消息队列?
      • 因为消息队列是低延迟,高可靠,高吞吐,可以应对大量并发。先接收大量用户的请求放到消息队列,再使用业务处理程序进行处理。
  • 日志处理

    • 为什么要使用消息队列?
      • 临时存储大量用户信息
    • 案例: 记录分析用户行为,手机大量的用户访问信息

3.生产者,消费者模型

  • 1.点对点模式
    • 步骤:
      • 消息生产者发送消息-> MQ
      • 消费者从MQ取出并消费
      • MQ删除消息,不再存储
    • 特点:
      • 单个消息只有一个消费者
      • 生产者和消费者之间无依赖性。生产者发送消息之后,不管消费者是否在允许,都不影响发送者下次发送消息
      • 消费者消费之后需要向MQ应答,方便队列删除消息
  • 2.发布订阅模式
    • 步骤:
      • 单个消息可以有多个订阅者
      • 发布者和订阅者之间有时间依赖性。针对某个topic的订阅者,它必须创建一个订阅者之后,才能消费消息。
      • 订阅者需要提前订阅该topic,并保持在线运行

4.Kafka

  • 是什么?
    • Apache 软件基金会开发的一个开源流,分布式流平台。
      • 分布式的流平台的3个关键能力:发布和订阅数据流;以容错的持久化方式存储数据流;处理数据流
  • 为什么用Kafka?
    • 支持生产者,消费者模型
    • 单机吞吐量是十万级
    • 消息延迟是毫秒级
    • 分布式可用型性高
    • 消息理论不会丢失
    • 支持事务
  • ​​​​​​​​​​​​​​应用场景:
    • ​​​​​​​建立实时数据管道,在系统/应用程序之间获取数据。
    • ​​​​​​​构建实时流应用程序,转换/响应数据流
  • KafkaTool 图形界面工具
    • 是一个用于管理和监控 Apache Kafka 集群的图形界面工具
    • 官方网站: Offset Explorer
  • 基本操作
    • 创建主题topic(实际工作中给开发要topic)类似Mysql的表
    • 生产者生产消息(以key,value键值对)到Kafka的topic中
    • 从Kafka topic取消息进行消费
      • 一个消费组中包含多个消费者,可以共同消费topic中的数据
      • 一个分区只能被一个消费者消费
  • Kafka幂等性
  • Kafkas生产者的分区写入策略
    • 轮询分区(默认)
      • 触发条件: 生产消息时key为null
        • ​​​​​​​​​​
    • ​​​​​​​按key分区
      • ​​​​​​​​​​​​​​
      • 触发条件: 生产消息时有key会根据分区数 按模运算​​​​​​​​​​​​​​
    • ​​​​​​​​​​​​​​自定义分区
    • ​​​​​​​写入策略会存在乱序问题
      • 生产者是有写入策略​​​​​​​,如果topic有多个分区,就会根据策略分配到不同partiton中存储,全局是乱序的;如果topic只有一个分区,消息是有序的。
  • ​​​​​​​​​​​​​​Kafka消费者的分区分配策略:
    • Range范围分配策略(默认)
      • 按照topic维度,确保每个消费者消费的分区数量是均衡

      • ​​​​​​​

    • ​​​​​​​
    • ​​​​​​​​​​​​​​

5.如何测试消息队列?

https://blog.csdn.net/weixin_46697247/article/details/144804334


http://www.ppmy.cn/ops/156585.html

相关文章

Python因为网络原因安装依赖库报错

现象 在终端运行以下指令 pip install pyautogui pillow keyboard 出现报错,终端信息如下: PS D:\code\Python> pip install pyautogui pillow keyboard Collecting pyautoguiUsing cached PyAutoGUI-0.9.54.tar.gz (61 kB)Installing build depe…

SpringBoot应用跨域访问解决方案

一、什么是跨域访问 说到跨域访问,必须先解释一个名词:同源策略。所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同、Host(ip)相同、端口相同的条件,否则访问将被禁止,该访问也…

一篇关于高等数理统计结合机器学习论文的撰写(如何撰写?)

前言 在大学或者研究生阶段,大家可能都会遇到一个问题就是,在上高等数理统计课程时,老师总会让同学们写一些大作业,比如论文什么的,接下来我会从计算机领域的角度,带领大家开启一篇从0到1的高等数理统计文…

Pixflow - CL-DJI Drone LUTs 120个大疆Drone无人机相机航拍电影级镜头LUT调色预设

120组电影质感DJI大疆无人机航拍视频LOG&Rec 709还原颜色分级调色LUTs预设包Pixflow – CL-DJI Drone LUTs 使用基于城市外观和 DJI 无人机镜头的最佳 Drone Luts 颜色预设来提升您的视频。 120 个出色的颜色分级 LUTS,您可以将其与任何无人机视频素材一起使用…

在 Linux 中,进程的状态 I 表示什么

在 Linux 中,进程的状态 I 表示 Idle(空闲)状态。进程处于 I 状态通常表示它处于 内核休眠 状态,即正在等待某些 I/O 操作或者资源。 不过,I 状态在进程列表中并不常见,它通常出现在 内核线程(…

第八天 继续学习ArkTS,掌握基础语法和组件创建

当然,继续学习ArkTS(Ark TypeScript)是一个很好的选择,它主要用于构建华为ArkUI框架中的应用程序。ArkTS结合了TypeScript的语法糖和ArkUI的声明式UI框架,使得开发更高效和便捷。以下是一些基础语法和组件创建的指南&a…

Django4:模板(上)—常用的标签介绍_django4 标签语法

[for...in...empty](#forinempty_94)[with](#with_104)[url](#url_124)[spaceclass](#spaceclass_152)[autoescape](#autoescape_163)[verbatim](#verbatim_184)模板介绍 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中其实很少这样用&am…

MySQL——表操作及查询

一.表操作 MySQL的操作中,一些专用的词无论是大写还是小写都是可以通过的。 1.插入数据 INSERT [INTO] table_name (列名称…)VALUES (列数据…), (列数据…); "[]"表示可有可无,插入时,如果不指定要插入的列,则表示默…