分布式技术导论 — 探索分析从起源到现今的巅峰之旅(消息队列)

探索分析从起源到现今的巅峰之旅

  • 分布式队列 - Kafka
    • 架构特性
      • 可扩展性
      • 磁盘优化与顺序访问
      • 大容量存储与历史数据利用
      • 高效数据封装与压缩
      • 智能内存管理与OS缓存利用
    • Kafka发布/订阅模型
    • Kafka架构分析
      • Producer和Consumer接口交互
        • Producer通过Topic发送数据
        • Consumer通过Topic消费数据(消费组)
          • 点对点模式
          • 发布/订阅模式下
    • Kafka设计的局限性
      • 1. 消费组的consumer数量不应少于Partition数量
      • 2. 消费组的consumer的服务器尽量保持配置相近
      • 3. 简单的数据路由无法真正实现对应的消费均衡
      • 4. 无法实现全局的消息的先进先出的顺序实现
    • Kafka的双R机制
      • Kafka的rebalance机制
      • Kafka的replication机制
    • Kafka网络ACK机制
      • 最多一次(at-most once)
      • 至少一次(at-least once)

分布式队列 - Kafka

Kafka作为分布式消息队列领域的杰出代表,已深深嵌入于各式流处理平台的核心,被广大用户广泛认可并采纳为关键性的数据供给渠道。其在多种技术栈中不可或缺的地位,有力地证明了Kafka在应对大规模、持续不断的实时数据流挑战时所展现出的卓越性能与高度适配性。

接下来,让我们深入剖析其服务架构与功能特性,揭示其背后蕴藏的设计精妙与技术实力,以理解其如何缔造如此出色的性能表现。

架构特性

Kafka通过运用其独特的分布式体系结构、精心设计的【磁盘利用机制】、【庞大的存储容量】、【先进的数据打包与压缩技术】,以及对【操作系统级缓存资源】的巧妙的运用,彰显出无与伦比的扩展潜能、存储经济性与数据处理效能。
在这里插入图片描述
经过精心优化的内核设计使得 Kafka 能够以极低的延迟处理大量消息,轻松支撑每秒百万级别的消息投递,满足大数据时代对实时性与处理速度的严苛要求。

可扩展性

Kafka 采用分布式集群部署,支持水平扩展以应对不断增长的数据量与处理需求,同时通过数据分区与副本机制确保数据的高可用性与容灾能力。这种弹性扩展能力使得Kafka能够在保持服务稳定的同时,轻松应对大规模数据流的挑战。
在这里插入图片描述

磁盘优化与顺序访问

Kafka巧妙利用磁盘空间,规避随机访问开销,消息以追加方式写入磁盘,并以分段日志形式存储。
在这里插入图片描述
确保了写入过程主要为顺序操作,极大提升了I/O效率,Kafka将消息持久化存储在磁盘上,不仅允许短暂的消息缓冲,还能作为长期数据存储,便于下游系统进行回溯消费或离线分析。
在这里插入图片描述
此外,Kafka巧妙管理日志段的生命周期,即使消息已被消费者消费,仍可保留一定时间,以供新加入的消费者回溯历史数据,或者用于离线分析与备份。

大容量存储与历史数据利用

通过高效利用磁盘存储资源,Kafka展现出强大的数据承载能力,能够从容应对大规模数据流。其设计允许即使在消息已被消费者处理后,仍可暂时保留在系统中。

  • 回溯消费:加入的消费者能够追溯并处理过去的历史数据,这对于实现无缝对接新消费者或恢复丢失状态至关重要。
  • 批量处理:Kafka允许一次性拉取大量数据,确保了批处理作业的高效执行,减少了网络交互次数,提升了整体处理吞吐。

高效数据封装与压缩

Kafka在数据封装方面采取轻量化策略,消息格式简洁且支持压缩,有效减少了传输和存储时的空间占用。
在这里插入图片描述
通过消除冗余对象包装,直接以接近原始数据的形态进行处理,降低了资源消耗。这种设计不仅加快了数据传输速度,还减少了中间环节的解码开销。

智能内存管理与OS缓存利用

Kafka巧妙利用操作系统级别的页面缓存(Page Cache),避免了应用程序层面额外缓存的引入,从而节省宝贵的内存资源。
在这里插入图片描述
直接操作文件数据,使得Kafka能够与OS缓存机制紧密协作,充分利用硬件缓存的优势,进一步提升数据读写的性能和效率,同时避免了多个组件间对内存资源的竞争。

Kafka发布/订阅模型

Kafka作为一款高度工程化的分布式消息传递系统,其内在价值体现在它精心构筑了一个坚如磐石的基础架构,该架构深度融合了容错性、扩展性和卓越的吞吐性能,旨在为大规模分布式环境中的数据流转提供无可挑剔的安全性与效率保障。
在这里插入图片描述
提供灵活的消息发布与订阅机制,多个生产者可以向同一Topic发送消息,而多个消费者可以根据自己的消费速率独立地订阅并处理这些消息,实现了数据流的解耦与异步处理。

Kafka架构分析

接下来,我们将详尽解析Kafka的基本架构以及Kafka系统的核心组件及其交互方式。

Kafka 在分布式消息传递体系中扮演着至关重要的中介角色,其核心功能体现为一个高度可扩展且高容错性的 broker 系统。作为一个消息代理,Kafka 有效地联结了消息的生产者(producers)与消费者(consumers),在二者之间建立起可靠的通信桥梁。
在这里插入图片描述
实际上,Kafka 构建于一个由多个节点组成的集群(cluster)之上,这种集群架构赋予了系统卓越的吞吐能力、数据冗余以及故障恢复能力。

Producer和Consumer接口交互

Kafka 集成了专属的 producer API 与 consumer API,这两套接口构成了与系统进行交互的标准接入层。无论开发者选择直接利用官方提供的客户端库对接这些 API。基于 API 规范自主研发符合业务需求的访问逻辑,producer 和 consumer 客户端均需遵循这些接口规范以确保与 Kafka broker 的顺畅通讯与数据交换。

Producer通过Topic发送数据

在Kafka中,数据流被组织成一系列被称为topic 的集合,为有效管理和控制单个topic 内的数据规模,topic 可以进一步划分为多个 Partition,并尽可能地分布在不同的节点上以实现负载均衡和水平扩展。为了确定数据写入哪个 Partition,Producer 需要执行一项决策过程。
在这里插入图片描述
在 Kafka 的 Producer API 设计中,提供了允许用户指定 Partition 键的参数机制。当用户指定了 Partition 键后,Producer API 会采用哈希算法对该键值进行计算,从而得出相应的 Partition 编号,以此来实现数据的定向发送和均匀分布。

Consumer通过Topic消费数据(消费组)

Kafka 灵活支持点对点(point-to-point)和发布/订阅(pub/sub)这两种消息队列模式,其关键在于引入了 Consumer Group 的概念。每个 Consumer Group 虽然被视为一个逻辑上的虚拟消费者,但实际上它可以包含多个实际的 consumer 实例。

点对点模式

所有 consumer 被配置为隶属于同一 Consumer Group,确保消息在组内严格有序且仅消费一次。
在这里插入图片描述

发布/订阅模式下

来自不同发布者的订阅者会被划分到不同的 Consumer Group 中,任何给定的 partition 在同一时间只能被所属 consumer group 中的一个 consumer 进行消费。
在这里插入图片描述

注意,每个 Consumer 实例在同一时刻仅与一个 partition 进行绑定,这意味着每个 consumer 只从分配给它的唯一一个 partition 中拉取消息进行处理。这样的设计保证了消息的有序消费及并行处理能力,同时也确保了 Consumer Group 内部的消息均衡分发。

Kafka设计的局限性

在这里插入图片描述

1. 消费组的consumer数量不应少于Partition数量

若 Consumer Group 内的实际 consumer 数量小于 Partition 数量,且没有正确地配置分区分配策略,则可能导致部分 Partition 中的数据无法得到对应 consumer 的消费处理。为了确保 Consumer Group 中的每个 Partition 均能够有 consumer 进行数据消费,Consumer Group 内的 consumer 数量不应少于 Partition 数量,否则将会面临某些 Partition 数据无人处理的现象。

2. 消费组的consumer的服务器尽量保持配置相近

若各consumer 消费数据的速度存在差异,那么 Partition 的消费进度可能会出现不均衡状况。具体表现为,部分 Partition 已经迅速消费至最新产生的数据,而其他Partition则仍停留在较早阶段的数据消费过程中,从而导致整个系统的消费进度不一致。

3. 简单的数据路由无法真正实现对应的消费均衡

  • Producer必须自行选择将数据投递至哪一个 Partition,因此,由于 Partition 的选择权在于 Producer,故由 Producer 端调整数据分布以改善消费不均衡的问题并不现实。
  • Consumer 同时只能与一个 Partition 绑定,通过简单的轮询策略(round-robin)在 Producer 或 Consumer 端均无法有效解决消费进度不均衡的问题。

4. 无法实现全局的消息的先进先出的顺序实现

每个Partition 实质上可视为一个消息子队列,它们各自维护消息顺序。尽管 Partition 机制存在,但 Kafka 并不保证跨 Partition 的全局顺序一致性;相反,它确保的是每个 Partition 内部消息的局部有序性。消息在单一 Partition 内遵循严格的先入先出(FIFO)原则,而不同 Partition 之间的消息顺序则不予保证。

Kafka的双R机制

Kafka的rebalance机制

Consumer group 内部动态调整,例如新增Consumer时,会自动触发重新平衡过程。这一过程旨在重新配置 partition 与 consumer 之间的映射关系,从而有效地均衡各 consumer 的数据负载。

下图是一个借鉴图,基本描述了整个rebalance的流程和过程:
在这里插入图片描述
通过这样的动态调整,原本可能存在的数据消费不均状况得以缓解,提升了整体系统的处理效率与资源利用率。

Kafka的replication机制

Kafka 实现复制的核心在于以Partition为基本单位,采取直接而高效的方式,让复制节点(Replicas)订阅并追踪目标 Partition,利用队列的天然订阅机制来简化复制流程。

每个复制集(Replica Set)内置一个主节点(Leader),专职处理所有读写操作,而其余跟随节点(Followers)作为热备,处于待命状态。

  1. 主节点之外的跟随节点集体构成了ISR(In-Sync Replicas)列表,该列表记录了与主节点数据同步状况良好的副本,确保了高可用性。ISR成员并非固定不变,而是根据同步状况动态调整。

  2. 数据写入流程中,尽管操作首先通过主节点执行,但系统默认要求数据必须被复制到ISR中的所有副本方视为提交成功(committed),之后方可供消费者检索。

这一策略确保了数据的持久性和一致性,即使在主节点故障时,也能从ISR中选举出新的主节点无缝接替,保障服务连续性,无需担忧数据丢失或不一致问题。

Kafka网络ACK机制

分布式系统因网络通信的介入,使得消息传递的可靠性成为一大挑战。网络环境如同其本身性质所示,有时能够容忍数据包丢失,而有时则要求数据包的可靠传输并具备重传及去重机制。

最多一次(at-most once)

Kafka消费者而言,其确认(ack)消息的时机直接关乎消息传递语义的界定。若消费者在接收到消息但尚未进行处理时即刻发送确认,一旦消费者在数据处理前遭遇故障,数据处理便无法确保完成,这种情况下,消息传递体现为“最多一次”(at-most once)语义。

至少一次(at-least once)

若消费者选择在消息接收并处理完毕后再发送确认信号,尽管确保了数据被处理,但在确认发送前的任何故障都将导致消息被重传,进而产生重复处理的情形,这对应着“至少一次”(at-least once)语义。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 解析xml文件-工具类

Java 解析xml文件-工具类 简述 Java解析xml文件,对应的Javabean是根据xml中的节点来创建,如SeexmlZbomord、SeexmlIdoc等等 工具类代码 import cn.hutool.core.io.FileUtil; import com.alibaba.cloud.commons.io.IOUtils; import com.seexml.bom.Se…

充电宝什么牌子好?买多少毫安充电宝合适?这几个误区别踩!

在选择充电宝时,很多消费者常常被各种品牌和容量规格搞得眼花缭乱。不少人认为,容量越大越好,但事实并非如此。其实,根据日常使用需求,选择10000毫安的充电宝已经足够应对大多数情况。10000毫安的充电宝不仅能够满足手…

无线备网,保障连锁零售数字化运营

为了提升运营效率、改进客户体验,零售商们不断引入新的数字化工具和平台,包括数字化收银、客流统计、客户关系管理系统等。现代化智慧零售的运营更加依赖于稳定、高效的网络连接,数字化网络不仅是提升运营效率和客户体验的关键,还…

多项目如何管理?盘点十大主流项目管理软件,轻松管理多个项目

多项目同时进行已经成为很多企业的现状,项目经理手握几个项目成为常态。 多项目管理之所以难,不仅在于项目数量的增加,而且在于项目资源分配不均、多项目进度比较难监控、沟通协作纷繁复杂。 应该如何做好进度管理,力求每个项目…

MySQL中的客户端选项(三)

默认情况下,LOAD DATA的LOCAL功能是否可用取决于MySQL客户端库在编译时是否启用了该功能。 当只给出--local-infile(不带值)时,它启用LOCAL数据加载。当给出--local-infile0时,它禁用LOCAL数据加载。当给出--local-in…

2024年粤港澳青少年信息学创新大赛图形化编程小高组真题试卷

2024年粤港澳青少年信息学创新大赛图形化编程小高组真题试卷 题目总数:16 总分数:100 单选题 第 1 题 单选题 默认小猫角色,以下哪个Scratch程序可以让小猫一直在舞台上随机移动,且每次在移动过程中用时1秒 A. B. C. D…

LearnOpenGL 及 ShaderToy 的 CMake 构建框架

文章目录 构建目标具体框架根目录src 目录app 目录import.cmake其他 CMake 函数 使用框架实际效果摄像机坐标变换使用 assimp 库加载模型shadertoy 测试 framebuffer 离屏渲染 其他 为了复习 OpenGL(主要是看到 shadertoy 上有好玩的着色器),…

Linux入门攻坚——26、Web Service基础知识与httpd配置-2

http协议 URL:Uniform Resource Locator,统一资源定位符 URL方案:scheme,如http://,https:// 服务器地址:IP:port 资源路径: 示例:http://www.test.com:80/bbs/…

rabbitMQ的简单使用

rabbitMQ的介绍 RabbitMQ是一个开源的消息代理和队列服务器,主要用于在不同的应用程序之间传递消息。它基于AMQP(Advanced Message Queuing Protocol)协议,提供了一种可靠的方式来处理异步通信。RabbitMQ使用Erlang语言编写&…

IT入门知识第三部分《软件开发》(3/10)

目录 IT入门知识大纲第三部分《软件开发》 1. 软件开发生命周期(SDLC) 1.1 需求分析 1.2 软件设计 1.3 程序编码 1.4 软件测试 1.5 项目部署 1.6 运行维护 2. 软件开发方法论 2.1 瀑布模型 2.2 敏捷开发 2.2.1 Scrum 2.2.2 Kanban 2.3 Dev…

告别盲目投放,Xinstall全方位监测App广告效果

在移动互联网高速发展的今天,App广告已成为品牌与消费者沟通的重要桥梁。然而,如何确保广告投放的精准性和效果性,成为广告主们关注的焦点。在这个数据驱动的时代,Xinstall以其专业的App广告效果统计功能,为广告主们提…

将Typora中图片从指定路径移动到当前文件夹下(准确位置为:XX.md文件所在目录/XX.assets/)

1、背景介绍 最开始时候,将复制到Typora中的图片放在了指定位置。但是在进行迁移(在别的电脑上打开md文件),会发现发送过来的文件不包含图片,导致文件内容缺失。解决办法就是将图片放在XX.md文件所在目录/XX.assets/。 2、方法 2.1 做好文件备份 2.2 替换图片链接中的…

使用MyBatisPlus让数据库和实体类字段自动映射

文章目录 使用MyBatisPlus让数据库和实体类字段自动映射需求场景假如没有映射把映射放到sql语句中使用MyBatisPlus提供的注解简化映射 使用MyBatisPlus让数据库和实体类字段自动映射 需求场景 数据库表中的字段名字,与实体类中的属性名字不一致,我们想…

使用PaddleNLP 从0构建一个属于你自己的心理大模型

项目源于:EmoLLM心理大模型,一直就有用paddle实践心理大模型的想法,终于实现了哈~。接下来就手把手带大家一块做一个心理大模型吧!!! 简单画了个框架图: 环境配置 In [ ] # !git clone -b develop https…

新安装的gcc编译出现编译器内部错误

在原本的环境中已经安装gcc了,但是版本比较低,想用新的版本。 重新下载安装gcc源码编译安装 make install安装好之后想用新的gcc来编译 先改下头文件搜索路径,xxxxxx就是安装后的include/c/xxx/这个路径 CPLUS_INCLUDE_PATH xxxxxx:$CPL…

建筑幕墙甲级设计资质:申请条件与评分标准

建筑幕墙甲级设计资质的申请条件与评分标准可以清晰归纳如下: 申请条件 一、企业基本情况 独立企业法人资格:企业需具有独立企业法人资格。注册资本:注册资本不少于300万元人民币。 二、技术人员条件 主要技术负责人或总工程师&#xff…

Nuxt.js 深入浅出:目录结构与文件组织详解

title: Nuxt.js 深入浅出:目录结构与文件组织详解 date: 2024/6/18 updated: 2024/6/18 author: cmdragon excerpt: 摘要:本文详述了Nuxt.js框架中关键目录与配置文件的作用及使用方法,包括布局设定、页面结构管理、插件集成、静态资源处理…

1999-2020年各地级市农村居民人均纯收入数据

1999-2020年各地级市农村居民人均纯收入数据 1、时间:1999-2020年 2、指标:年份、城市、农村居民人均纯收入 3、来源:区域年鉴、各省市年鉴 4、范围:地级市,具体每年城市数量参看下文图片,具体城市名单…

macbook屏幕录制技巧,这2个方法请你收好

在当今数字化时代,屏幕录制成为了一项不可或缺的技能,无论是教学演示、游戏直播,还是软件操作教程,屏幕录制都能帮助我们更直观地传达信息。MacBook作为苹果公司的标志性产品,其屏幕录制功能也备受用户关注。本文将详细…

【小白专用24.6.18】C# SqlSugar:连接数据库实现简单的,增、删、改、查

【小白专用 已验证24.6.18】C# SqlSugar操作MySQL数据库实现增删改查-CSDN博客 通过NuGet包管理器搜索SqlSugar(MySql还要安装MySql.Data、Newtonsoft.Json)包并安装 SqlSugarClient db new SqlSugarClient(new ConnectionConfig(){ConnectionString …