异步io

是内核fd与应用程序直接的关系

io 多路复用

1.检测io是否就绪

2.read/write

消息队列kafka:

1.典型应用 :异步处理,系统解耦,流量削峰,日志处理

2.核心原理:kafka体系结构以及读写流程

3.具体操作:high level api 以及low level api

Kafka是一个开源的、高性能的,高吞吐的分布式流平台,又称为分布式消息队列中间件

消息队列特征:顺序排序,按照先进先出的方式进行消费

Kafka 消息队列通过发布-订阅模式分区机制持久化存储分布式架构实现高效的消息传递与系统解耦,其核心原理可归纳为以下几个方面:

一、核心架构与组件

  1. Producer(生产者):负责将消息发布到 Kafka 集群的特定 Topic 中。生产者支持同步和异步发送模式,可通过分区策略(如轮询、哈希)将消息均匀分配到不同分区,实现负载均衡。
  2. Broker(代理节点):Kafka 集群中的服务器节点,负责存储消息、处理读写请求。每个 Broker 存储部分 Topic 分区,通过多节点协同实现水平扩展和高可用性。
  3. Topic(主题):消息的逻辑分类单元,如“订单创建”“用户注册”等。生产者将消息发送到指定 Topic,消费者通过订阅 Topic 获取消息。
  4. Partition(分区):Topic 的物理存储单元,每个 Topic 包含一个或多个分区,分散存储在不同 Broker 节点上。分区是 Kafka 并行处理的最小单位,支持多消费者并行消费,提升吞吐量。
  5. Consumer(消费者):从 Broker 拉取消息并处理。消费者属于某个 Consumer Group,同一组内消费者通过负载均衡机制分摊分区消费任务,避免重复处理。
  6. Zookeeper:负责集群元数据管理(如 Broker 注册、Leader 选举)、Consumer Group Rebalance(负载均衡)等协调工作(注:Kafka 2.8+ 版本支持无 Zookeeper 模式)。

二、关键实现原理

  1. 分区机制与并行处理
    • 分散存储:通过分区将 Topic 数据分散到多个 Broker 节点,避免单节点存储压力过大。例如,10GB 数据分布在 5 个分区,每个分区存储 2GB。
    • 并行消费:每个分区可被一个消费者独立消费,多个分区可被多个消费者并行处理,显著提升吞吐率。
    • 顺序保证:单个分区内的消息按顺序写入并分配唯一 Offset(偏移量),确保消息有序性,适用于金融交易、日志记录等需严格顺序的场景。
  2. 持久化存储与高可靠性
    • 顺序写入磁盘:Kafka 将消息按顺序追加到分区日志文件(.log),利用机械盘顺序写入特性(比随机写入快 100 倍以上)提升性能。
    • 分段存储:日志文件划分为多个 Segment(默认 1GB/个),旧 Segment 定期删除或归档,避免单个文件过大影响查询效率。
    • 副本机制:每个分区配置多个副本(Replication Factor),分布在不同 Broker 节点上。主副本(Leader)处理读写请求,从副本(Follower)同步数据,确保单点故障时数据不丢失。
  3. 异步通信与系统解耦
    • 生产者异步发送:生产者发送消息后立即返回,无需等待消费者响应,提升系统响应速度。例如,用户注册时发送验证短信,无需等待短信接口返回,直接将请求写入队列即可返回注册成功。
    • 消费者 Pull 模式:消费者主动从 Broker 拉取消息,可根据自身处理能力控制消费速度,避免消息积压或丢失。
    • 解耦性:生产者与消费者无需感知对方存在,仅通过队列交互。例如,电商系统中订单系统将消息写入队列,支付、物流等系统独立消费,各模块可独立升级或扩展。
  4. 流量削峰与负载均衡
    • 缓冲机制:在突发流量(如秒杀场景)下,消息队列缓存大量请求,避免后端系统因瞬时压力过大崩溃。例如,每秒 10 万笔订单请求可先存入队列,再由系统按每秒 1 万笔的处理能力逐步消费。
    • 动态负载均衡:Producer 监听 Broker 注册节点(/brokers/ids),实时获取可用 Broker 列表,通过轮询或哈希算法将消息分散到不同节点。Consumer Group 内消费者通过 Rebalance 机制动态分配分区,确保负载均衡。
  5. 消息消费与进度管理
    • Offset 管理:消费者需显式提交 Offset(消费进度)到 Kafka 内部主题(__consumer_offsets),防止消费中途故障导致数据丢失。重启后,消费者从上次提交的 Offset 继续消费。
    • 消费语义:支持 At Most Once(可能丢失消息)、At Least Once(可能重复消费)两种语义,满足不同业务场景需求。

三、数据流程示例

  1. 生产者发送消息:Producer 通过 Push 模式将消息发送到 Broker 的指定 Topic 分区,消息按顺序写入分区日志文件。
  2. Broker 存储与复制:Broker 接收消息后,将消息写入 Leader 分区,并同步到 Follower 副本(ISR 机制确保数据一致性)。
  3. 消费者拉取消息:Consumer 通过 Pull 模式从 Broker 拉取消息,根据 Offset 定位消费位置,处理完成后提交新 Offset。
  4. Zookeeper 协调:管理 Broker 注册、Topic 分区信息、Consumer Group Rebalance 等元数据,确保集群高可用性和数据一致性。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

青龙峡拔韭菜

我们一年四季,除了冬天不往山里进,其余季节,只要天气允许,我们都会进山。在山里拔韭菜,是我们百做不烦的一件事。今年大旱,从五月份上山找韭菜,没有如愿。直到入秋后,我们再次去青龙…

5、docker镜像管理命令

1、命令总览命令(含关键参数)作用出现频率备注docker buildx build --platform … -t … --push .一次构建并推送多平台镜像高频需先 docker buildx create --usedocker buildx build -o typedocker,destxxx.tar .构建后离线导出 tar 包中频只导出单平台…

阿里云ECS云服务器临时升级带宽方法

阿里云ECS云服务器临时升级带宽方法一、背景与需求二、原理三、操作步骤步骤 0: 准备工作步骤 1: 创建弹性网卡 (ENI)步骤 2: 创建并绑定弹性公网IP (EIP)步骤 3: SSH登录ECS并切换到高速通道 (eth1)步骤 4: 执行你的高带宽任务步骤 5: 任务完成,切回默认网卡 (eth0…

Java语言简介

一.Java语言的起源 Java语言的前身是Oka语言,是美国Sun Microsystems公司于1991年推出的,仅限于公司内部使用的语言。1995年,Sun公司将Oak语言更名为Java语言,并正式向公众推出。这之后,Java语言不断更新,其类库越来越丰富,性能逐步提升,应用领域也显著拓展,已成为当今…

VUE+SPRINGBOOT从0-1打造前后端-前后台系统-视频列表与视频播放

在现代Web开发中,视频播放功能已成为许多网站的基本需求。本文将基于Vue.js框架,详细讲解如何实现一个视频列表与播放器交互的功能模块。这个组件可以让用户点击列表中的视频项来播放对应的视频,并支持再次点击关闭播放器。功能概述我们实现的…

详解 Seaborn:让数据可视化更简单高效的 Python 库

在数据科学领域,可视化是理解数据、挖掘规律的重要手段。今天要为大家介绍的 Seaborn 库,正是数据可视化领域的一把 “利器”。它基于 Matplotlib 开发,却凭借更简洁的接口和更美观的默认样式,成为众多数据分析师的首选工具。下面…

Cesium1.95中如何高效管理 1500 个高频实体

一、建议:不要频繁创建/销毁,而是复用对象;​​​​使用 CallbackProperty更新位置而不是删了重建;​​​​对大量 Billboard / Polyline / Label,优先使用对应的 *Collection,然后批量更新;​​…

全面了解机器语言之kmeans

深入理解 KMeans 聚类算法:原理、实现与应用在机器学习领域,聚类算法作为无监督学习的核心技术之一,一直以来都是数据挖掘和模式识别的重要工具。其中,KMeans 算法以其简洁的原理、高效的计算性能和广泛的适用性,成为最…

纳米陶瓷与光子集成:猎板PCB定义下一代VR硬件的技术蓝图

虚拟现实(VR)设备正从“视觉沉浸”向“多感官无感交互”演进,其底层PCB技术面临带宽、算力密度与动态可靠性的三重挑战。作为国内高端PCB技术的引领者,​​猎板PCB​​以材料革新、光电子融合与智能响应为核心,构建了适…

Linux ssh-keygen系列命令与ssh命令的使用

关联文章 Linux ssh 免密登录配置👍对日开发 TeraTerm 批量向各台服务器传输文件SSH 教程👍👍👍👍👍👍 目录一. ssh-keygen相关命令1.1 简介1.2 生成密钥1.3 ssh-copy-id 上传公钥到指定的服务…

从C++0基础到C++入门 (第二十五节:指针【所占内存空间】)

目录 一. 指针所占内存空间 1.1 验证指针大小的代码示例 1.2 不同系统架构下的差异 1.3 指针大小与类型无关 1.4 空指针的大小 1.5 多级指针的大小 1.6 实际应用中的注意事项 一. 指针所占内存空间 指针在内存中占用的空间大小取决于系统架构和编译环境。 32位系统中指…

Windows选择文件自动删除及输入框自动打字的解决办法

觉得有帮助麻烦您动动发财的小手点赞、收藏、加关注,感谢! 运行环境:windows10 现象:鼠标点击任何文件,上下键选择任何文件都会自动放入回收站并弹警告框,鼠标放入输入框会自动打一串字符,删除…

大模型 MCP服务案例详细讲解

大模型与 MCP(Model Context Protocol)服务器的交互是一个双向、异步、流式的过程,涉及协议解析、函数调用、实时数据交换等关键环节。下面我将详细解释整个交互流程,结合具体示例和时序图说明。 🔄 核心交互流程图 #mermaid-svg-Adxo4FoP4oRzAJdV {font-family:"tr…

MVCC和日志

MVCC是一种并发控制的方法,在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存主要是为了提高数据库并发性能,更好的处理读写冲突,做到即使有读写冲突时,也能做到不加锁,非阻…

Redis源码安装 Failed to configure LOCALE for invalid locale name 报错解决

源码安装之后 报错 Failed to configure LOCALE for invalid locale name原因是redis 8.0 需要配置字符集 只需要在环境变量中添加 LANGen_US.utf8 即可, 在配置之前先查看当前系统中存在哪些字符集 locale -a然后在 /etc/profile 环境变量中添加配置 LANGen_US.ut…

跑酷小游戏2.0

emm&#xff0c;下面是1.0版本的&#xff0c;我问了下AI&#xff0c;出了第四关&#xff0c;按步骤更新吧。其实是我也搞不懂AI在说啥//跑酷游戏C版 #include<bits/stdc.h> #include<windows.h> #include<stdio.h> #include<conio.h> #include<tim…

相比于传统的全波分析,特征模分析具有哪些优点

相比传统的全波分析&#xff08;Full-Wave Analysis&#xff0c;直接求解电场/电流分布&#xff09;&#xff0c;特征模分析&#xff08;Characteristic Mode Analysis&#xff0c;CMA&#xff09;的优点主要体现在物理可解释性、设计指导性和计算效率三个方面。1. 物理机理更清…

UE材质World Position 和 Object Position

Object Position 是 物体原点在世界坐标系下的位置 World Position 是 物体上的这个点 在世界坐标系下的位置 Actor Position 是 物体轴点位置 WorldPosition - ObjectPosition 是一个从物体原点&#xff08;pivot&#xff09;指向物体上该点的向量&#xff08;方向&#x…

github上传文件

git remote add origin https://github.com/Ineedstrong/socket-practice.git如果不行的情况下git remote set-url origin gitgithub.com:Ineedstrong/socket-practice.git就以这种方式3. 使用 SSH 替代 HTTPS&#xff08;推荐&#xff09;绕过 HTTPS 的 TLS 问题&#xff1a;生…

【STM32U385RG 测评】基于VSCode的STM32开发环境搭建

【STM32U385RG 测评】搭建基于VSCode的STM32开发环境 文章目录【STM32U385RG 测评】搭建基于VSCode的STM32开发环境一、安装软件1.1 安装VSCode1.2 安装STM32CubeMX1.3 安装STM32CubeCLT1.4 安装ST-MCU-FINDER-PC二、安装插件2.1 安装 STM32Cube for VSCode插件三、创建项目3.1…