当前位置: 首页 > news >正文

性能解析案例

异步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.xdnf.cn/news/1277533.html

相关文章:

  • Speaking T2 - Dining Hall to CloseDuring Spring Break
  • 论文复现与分析内容关于一种实用的车对车(V2V)可见光通信(VLC)传播模型
  • 攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DNS欺骗、DHCP饿死)
  • Doubletrouble靶机练习
  • Leaflet地图高亮与编辑功能实现
  • Jmeter性能测试之检测服务器CPU/Memory/磁盘IO/网络IO
  • 深度学习-卷积神经网络-AlexNet
  • 【走进Docker的世界】Docker环境搭建
  • 震动马达实现库函数版(STC8)
  • 机器学习——多元线性回归
  • C++移动语义、完美转发及编译器优化零拷贝
  • [创业之路-541]:经营分析会 - 企业的经营分析会,研发负责人负责提供哪些信息?
  • 【RocketMQ 生产者和消费者】- ConsumeMessageOrderlyService 顺序消费消息
  • 不同于传统的简并模分离圆极化天线,基于耦合谐振器的圆极化天线的原理是什么?
  • 如何通过API接口实现批量获取淘宝商品数据?(官方与非官方渠道分享)
  • 代码随想录算法训练营第六十天|图论part10
  • Java 基础编程案例:从输入交互到逻辑处理
  • ATF(TF-A)安全通告 TFV-12(CVE-2024-5660)
  • JDBC的连接过程(超详细)
  • 机器学习——标准化、归一化
  • 从零开始理解百度语音识别API的Python实现
  • nginx 反向代理传递原始域名
  • 前端开发中的常见问题与实战解决方案​
  • PostgreSQL 批量COPY导入优化参数配置
  • GC如何判断对象可以被回收?
  • SpringAI报错:com.github.victools.jsonschema.generator.AnnotationHelper
  • 《设计模式》UML类图
  • Java集合框架、Collection体系的单列集合
  • Elasticsearch QueryDSL 教程
  • Android APK 使用OpenGl 绘制三角形源码