消息队列的 6 种经典使用场景和 Kafka 架构设计原理详细解析

news2024/10/6 12:30:30

今天来聊一聊 Kafka 消息队列的使用场景和核心架构实现原理,帮助你全面了解 Kafka 其内部工作原理和设计理念。。

Apache Kafka 是一个高吞吐量、分布式的流处理平台,广泛应用于实时数据管道和流处理应用中。

Kafka 以其高性能、低延迟、扩展性和可靠性,成为了大数据生态系统中的重要组件。

1.消息队列有什么作用

消息队列是一种进程间通信或者同一个进程中不同线程间的通信方式,主要解决异步处理、应用耦合、流量消峰、负载均衡等问题,实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。

kafka 本质也是一个消息队列,如下图,上游系统将消息发送到消息中间件,下游系统从消息中间件中获取消息消费。

马楼:“上游系统为什么不直接发消息给下游系统,搞个中间商干啥?”

这就要从消息队列的主要作用说起了。

异步处理

消息队列可以实现异步通信,使得发送消息的组件不需要等待接收消息的组件处理完毕,从而提高系统的响应速度和处理效率。

如下图所示,阿斗被邀请去休闲养生 SPA 享受,服务包含泡脚、按摩、吃水果、看电视。

SPA 系统只需要验证啊斗的会员卡有钱就也可以服务了,串行化执行的每个步骤的话,体验太差。可以同时进行,快乐加倍。泡脚、按摩的同时可以同时吃水果看电视,大大提升体验。

图片

应用解耦

如下图所示,采用了消息中间件之后,订单系统将下单消息发送到 MQ 存储,然后各个下游系统从 MQ 中获取消息并执行对应的业务逻辑。

这种异步的方式,减少了服务之间的耦合程度,不然的话,维护订单系统的马楼要哭死,下单后调用多个下游系统,有的系统通过接口调用还必须要求重试机制不能丢失。

有了消息队列后,利用 MQ 本身提供的高可用保证数据不丢失,另外不管你是王启年还是范闲,我就放到消息队列中,你们自己从 MQ 拿,不用再去联系每个系统的维护人员。

图片

流量削峰

在流量高峰期,消息队列可以充当缓冲区,平滑高峰流量,避免系统因瞬时高负载而崩溃。

比如某个接口平时的流量也就 100TPS,特殊时刻会暴增,达到 4000 TPS,一般来说,MySQL 每秒可以处理 2000 个请求,每秒 4000 个请求,可能直接把 MySQL 搞崩溃。

你可以通过消息队列来进行流量削峰,防止把 MySQL 干爆,引入 MQ 后,先将请求存到 MQ 中,MySQL 慢慢处理请求。

图片

负载均衡

Kafka 的 Topic 可以分成多个 Partition,每个 Paritition 类似于一个队列,单个 Paritition 可以保证数据有序。

Kafka 具有优秀的分区分配算法——StickyAssignor,把生产者的消息发送到不同 Paritition,保证 Paritition 的分配尽量地均衡。这样,整个集群的分区尽量地均衡,各个 Broker 和 Consumer 的处理不至于出现太大的倾斜。

同一个 Consumer Group 下的 Consumer 并发消费 Paritition,需要注意的是,如果 Consumer Group 下的 Consumer 个数超过 Partition 数量,那么会出现空闲 Consumer。

图片

顺序保证

每个 Kafka 主题(Topic)可以分为多个分区(Partition)。每个分区都是一个有序的、不可变的消息队列。

生产者(Producer)将消息发送到分区时,Kafka 按消息的发送顺序将其追加到分区的末尾。

消费者(Consumer)读取分区中的消息时,也是按照消息的存储顺序逐条读取。

因此,在同一个分区内,消息的顺序是严格保证的。这对于某些业务场景来说非常重要,特别是需要保证消息顺序性的应用,例如金融交易、订单处理等。

针对消息有序的业务需求,还分为全局有序和局部有序。

  • 全局有序:一个 Topic 下的所有消息都需要按照生产顺序消费。

  • 局部有序:一个 Topic 下的消息,只需要满足同一业务字段的要按照生产顺序消费。例如:Topic 消息是订单的流水表,包含订单 orderId,业务要求同一个 orderId 的消息需要按照生产顺序进行消费。

全局有序

Kafka 的一个 Topic 可分为多个 Partition,Producer 发送消息的时候,kafka 会使用负载均衡策略将消息发送到其中一个 Partition,会导致顺序是乱的。

要保证全局有序,那么一个 Topic 只能存在一个 Partition。而且对应的 Consumer 也要使用单线程或者保证消费顺序的线程模型。

局部有序

要满足局部有序,只需要在发消息的时候指定 Partition Key,Kafka 对其进行 Hash 计算,根据计算结果决定放入哪个 Partition。这样 Partition Key 相同的消息会放在同一个 Partition,从而保证有序。

此时,Partition 的数量仍然可以设置多个,提升 Topic 的整体吞吐量。

容错性

Kafka 提供了消息持久化、重试机制和确认机制,确保消息不会丢失或重复处理,增强系统的容错能力。

2. Kafka 核心组件

终于到今天的主角登场,直接上图。

图片

Kafka 的核心架构由以下几个主要组件组成:

  1. Producer(生产者):发送消息的一方,负责发布消息到 Kafka 主题(Topic)。

  2. Consumer(消费者):接受消息的一方,订阅主题并处理消息。

  3. Broker(代理):服务代理节点,Kafka 集群中的一台服务器就是一个 broker,可以水平无限扩展,同一个 Topic 的消息可以分布在多个 broker 中。

  4. Topic(主题):Kafka 中的消息以 Topic 为单位进行划分,生产者将消息发送到特定的 Topic,而消费者负责订阅 Topic 的消息并进行消费。

  5. Partition(分区):主题的物理分片,提高了并行处理能力。

  6. Replica(副本):副本,是 Kafka 保证数据高可用的方式,Kafka 同一 Partition 的数据可以在多 Broker 上存在多个副本,通常只有主副本对外提供读写服务,当主副本所在 broker 崩溃或发生网络一场,Kafka 会在 Controller 的管理下会重新选择新的 Leader 副本对外提供读写服务。

  7. ZooKeeper:管理 Kafka 集群的元数据和分布式协调。

3. Topic 和 Partition

来看下什么是 Topic 和 Partition。

3.1 主题(Topic)

Topic 是 Kafka 中数据的逻辑分类单元,可以理解成一个队列。Broker 是所有队列部署的机器,Producer 将消息发送到特定的 Topic,而 Consumer 则从特定的 Topic 中消费消息。

图片

3.2 分区(Partition)

为了提高并行处理能力和扩展性,Kafka 将一个 Topic 分为多个 Partition。

每个 Partition 是一个有序的消息队列,消息在 Partition 内部是有序的,但在不同的 Partition 之间没有顺序保证。

Producer 可以并行地将消息发送到不同的 Partition,Consumer 也可以并行地消费不同的 Partition,从而提升整体处理能力。

图片

3.3 副本(Replica)

每个 Partition 可以有多个副本(Replica),分布在不同的 Broker 上。

Kafka 会为分区的多个副本选举一个作为主副本(Leader),主副本对外提供读写服务,从副本(Follower)实时同步 Leader 的数据。

Kafka 通过副本机制实现高可用性,当一个 Broker 故障时,可以通过副本保证数据不丢失,并继续提供服务。

如下图所示,黄色表示 leader,灰色表示 follower。Topic 分了三个 Patition,副本数是 2。

图片

4. Consumer 和 ConsumerGroup

Kafka 有消费组的概念,每个消费者只能消费所分配到的分区的消息,每一个分区只能被一个消费组中的一个消费者所消费,所以同一个消费组中消费者的数量如果超过了分区的数量,将会出现有些消费者分配不到消费的分区。消费组与消费者关系如下图所示:

图片

5. 数据存储机制

Kafka 的数据存储机制采用了顺序写入磁盘的方式,通过这种方式来提高写入性能。

每个 Partition 的消息被存储在多个 Segment 文件中,每个 Segment 文件由一组连续的消息组成。Segment 文件通过索引和日志文件进行管理,索引文件记录了每条消息在日志文件中的偏移量。

Kafka 的存储机制具备以下几个特点:

  1. 顺序写入:Kafka 通过顺序写入来提高写入速度和磁盘利用率。

  2. Segment 文件:消息被分段存储,便于管理和清理。

  3. 索引机制:通过索引快速定位消息,提高读取效率。

  4. 日志清理策略:支持基于时间和大小的日志清理策略,确保存储空间的有效利用。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1798454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于腾讯云HAI玩转StableDiffusion,告别GPU烦恼

前言 随着人工智能技术的飞速发展,AI已经在各行各业发挥着越来越重要的作用。最近,Stable Diffusion文本生成图片模型作为一种备受瞩目的AI技术,引发了广泛关注。这种模型能够根据用户提供的文本描述,生成与之相对应的高质量图片…

展示设计装修要掌握哪些专业

1、室内设计 多数展示设计装修都是在室内进行的,各种展台也可以类比为各种家具。家居环境本身也是一个展厅,展示主人的品味,目标受众就是主人一家。把室内设计拓展到展览设计和展台搭建上,只是受众群体更广泛了,更注重…

51单片机STC89C52RC——1.1点亮一个LED

目录 STC单片机模块 LED模块 创建Keil项目 代码 效果 STC单片机模块 我们程序中要点亮的LED灯的位置如下图。 我们程序要用到的针脚如下图 LED模块 电路图如下 8个LED,全部点亮 每一bit位 都需要设置为0 二进制是0000 0000 。如果只点亮D1一个&#xff…

2.1 OpenCV随手简记(二)

为后续项目学习做准备,我们需要了解LinuxOpenCV、Mediapipe、ROS、QT等知识。 一、图像显示与保存 1、基本原理 1.1 图像像素存储形式 首先得了解下图像在计算机中存储形式:(为了方便画图,每列像素值都写一样了)。对于只有黑白颜色的灰度…

植物大战僵尸杂交版 2.0 下载及配置图文教程

文章目录 Part.I IntroductionPart.II 下载Chap.I 下载地址Chap.II 网盘直链下载 Part.III 配置Chap.I 解压与安装Chap.II 加载存档Chap.III 其他设置 Reference Part.I Introduction 最近看大仙儿直播植物大战僵尸,觉得挺好玩的。它大概长这样: 就上网…

吴恩达深度学习笔记:机器学习(ML)策略(1)(ML strategy(1))1.7-1.8

目录 第三门课 结构化机器学习项目(Structuring Machine Learning Projects)第一周 机器学习(ML)策略(1)(ML strategy(1))1.7 什么时候该改变开发/测试集和指…

GAT1399协议分析(9)--图像上传

一、官方定义 二、wirechark实例 有前面查询的基础,这个接口相对简单很多。 请求: 文本化: POST /VIID/Images HTTP/1.1 Host: 10.0.201.56:31400 User-Agent: python-requests/2.32.3 Accept-Encoding: gzip, deflate Accept: */* Connection: keep-alive content-type:…

“能监测、会预警、快处置”,51WORLD智慧应急数字孪生解决方案

我国自然灾害多发,安全生产基础薄弱。加之城市运行日益复杂,安全隐患、安全问题不断涌现,探索构建全新的应急管理体系和能力迫在眉睫。 面对新形势,依托数字孪生、云计算、大数据、人工智能等新一代信息技术打造统分结合、协调联…

Elastic Search (ES)Java 入门实操(1)下载安装、概念

实现数据查询代码:Elastic Search(ES)Java 入门实操(2)搜索代码-CSDN博客 Elastic Search 官方描述,是一个分布式的搜素数据分析引擎,可以集中存储数据,快速完成搜索,微调…

怎么把wmv格式转换成mp4?四种将wmv转成MP4格式的方法

怎么把wmv格式转换成mp4?在微软操作系统中,我们经常会遇到wmv格式的视频文件。这种由微软开发的视频格式在微软平台上有很好的兼容性,但它也存在一些被忽视的缺点。首先,wmv格式支持数字版权管理,这意味着某些视频可能…

k8s-pod参数详解

目录 概述创建Pod编写一个简单的Pod添加常用参数为Pod的容器分配资源网络相关Pod健康检查启动探针存活探针就绪探针 作用整个Pod参数配置创建docker-registry 卷挂载 结束 概述 k8s中的pod参数详解。官方文档   版本 k8s 1.27.x 、busybox:stable-musl、nginx:stable-alpine3…

高性价比蓝牙耳机排行榜10强,四大高性价比品牌推荐

在众多的品牌和产品中,如何选择一款性价比高、音质出众、功能齐全的蓝牙耳机,成为了许多消费者关注的焦点,作为一个蓝牙耳机的老油条,我特别为大家精选了高性价比蓝牙耳机排行榜的10强,并重点推荐四大高性价比品牌&…

重庆公司记账代理,打造专业财务管理解决方案的领先企业

重庆公司记账代理,作为专业的财务管理服务提供商,我们的目标是为公司的经营管理和决策提供科学、准确的财务数据支持,我们通过长期的专业经验和对市场的深入理解,为您提供一站式的记账服务和财务咨询。 专业团队 我们拥有一支由经…

阿里云ECS实例镜像本地取证

更新时间:2024年03月21日10:09:37 1. 说明 很多非法案件中,服务器是直接搭建在阿里云上的,比如我们在拿到OSSKey之后(技术方法、其它方法等),可以将涉案服务器镜像导出,在本地进行取证分析。 …

虚拟机上安装 VB6 mini,中文乱码

一、网址下载 VB6 mini(普通下载即可) https://ccswust.lanzoui.com/i4mZrhf8ipi 二、VB6-Mini_20160110,放入虚拟机,双击进行安装 三、点开VB6 Mini后,中文乱码(以Win10为例 开始–Settings–Time &…

使用opencv在图像上画带刻度线的十字线,以图像中心点为0点

使用OpenCV在图像上绘制带刻度线的十字线&#xff0c;可以通过以下步骤实现。我们将首先找到图像的中心点&#xff0c;然后绘制水平和垂直线&#xff0c;并在这些线的适当位置绘制刻度线。以下是详细的C代码示例&#xff1a; #include<opencv2\opencv.hpp> //画十字标注…

职场奋斗10年,到此结束,享年38

职场奋斗10年&#xff0c;到此结束&#xff0c;享年38 昨天一个粉丝&#xff0c;上来就给我转2000大洋&#xff0c;说有问题想问我&#xff0c;看完他的问题&#xff0c;直接把钱退给了他&#xff0c;估计又有人要说我脑壳长包了。 主动送上门的钱谁不想要&#xff1f;主要是…

【人工智能】第三部分:ChatGPT的应用场景和挑战

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

深入探索:十种流行的深度神经网络及其运作原理

算法 深入探索&#xff1a;十种流行的深度神经网络及其运作原理一、卷积神经网络&#xff08;CNN&#xff09;基本原理工作方式 二、循环神经网络&#xff08;RNN&#xff09;基本原理工作方式 三、长短期记忆网络&#xff08;LSTM&#xff09;基本原理工作方式 四、门控循环单…

Win10系统无法安装msi文件问题

winR输入services.msc打开服务 找到Windows Installer并启动 输入msiexec /package “msi文件路径”