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

消息队列-kafka-服务端处理架构(架构,Topic文件结构,服务端数据的一致性)

服务端处理架构

资料来源于网络
在这里插入图片描述
网络线程池:
接受请求,num.network.threads,默认为 3,专门处理客户的发送的请求。

IO 线程池:
num.io.threads,默认为 8,专门处理业务请求。也就是它不负责发送响应,发送响应还是由网络线程池处理。

当遇到性能瓶颈的时候可以适当的调整这两个参数

服务端消息存储文件布局

1 Topic 文件结构
在这里插入图片描述
Segment 文件结构
命名规则:一个 segment 的名称其实是当前 segment 第一条消息的偏移量,也就是说一个segement如果写不下了就会生成新的segment。
查找机制

  • 将所有的 segment 文件名进行生序排列然后找到偏移量最后落在哪个 segment 对象上(采用二分,因为文件名是有序的)。
  • 继续从这个 segment 里面的 .index 文件找到消息的物理偏移量,也就是对应图中的.index偏移量,最后拿着物理偏移量去 .log 文件找到最终的实体消息,非常的迅速。
    删除机制
    按照时间过期多少删(默认7天)、按照大小来删

服务端数据的一致性

其实也就是分区和副本之前的一致性。比如说我们P0有9条消息,因为每个节点同步数据(网络,IO等原因)所以导致R0 和 R3 之间的数据并不一致。
HW:高水位,消费者消费最高的位置,其实也就是木桶原理,所以只能到下面图中的第四条消息。
LEO:log写文件的最后一个位置。
ISR:也就是一个分区和备份节点的队列。比如P0,R0,R3.

如果我们的备份节点挂掉了:
1 首先它会从ISR中剔除,当恢复正常的时候,会向主分片获取 HW 高水位线,与自己的 LEO 比对,如果自己的 LEO 超过 HW 则干掉超过的部分,小于的话就从主分片复制数据过来。
2 复制的时候,如果复制之后的 LEO 与 HW 持平的话,那么就会重新加入到 ISR 同步队列中

如果我们的主分区挂掉了:
1 从ISR中剔除,选择数据最多的数据为主分片。
2 活过来的时候,发现已经有顶替的 leader 角色(主分片)了,那么就跟随,也就是向 leader 获取 HW 高水位线,与自己的 LEO 比对,大于 LEO 则删除,小于 LEO 则从 leader 这边复制数据过去。
3 复制数据的进度如果赶上了主分片的 HW 的话,那么就继续加入到 ISR 队列中。
但是我们主分片数据最多,为什么要把后面的数据干掉呢,这样不是会丢失消息吗?
这样其实是保证了数据的一致性,也就是保证分区和备份节点的都是同样的进度。
数据不丢失问题是由Producer来保证的,也就是有重试机制,如果没有发送成功的话,就会从新发送,但是消费者一侧一定要做幂等。
在这里插入图片描述

http://www.lryc.cn/news/311818.html

相关文章:

  • ES之API系列--index template(索引模板)的用法(有实例)
  • electron+vue3全家桶+vite项目搭建【28】封装窗口工具类【2】窗口组,维护窗口关系
  • docker安装ES和kibana
  • uniapp微信小程序获取当前位置
  • HarmonyOS创建项目和应用—设置数据处理位置
  • 3.1_2024ctf青少年比赛部分web题
  • Vue3:OptionsAPI 与 CompositionAPI的比较
  • Rust! 无VDom! 尤雨溪解析 Vue.js 2024 新特性
  • Windows上websocket客户端连接定时存储消息到文件并加载文件定时发送服务端工具实现
  • 【STM32+OPENMV】二维云台颜色识别及追踪
  • JavaScript基础3之面向对象关于面向过程、函数式编程、对比、构造函数、原型
  • 运用Tensorflow进行目标检测
  • 【源码】imx6ull实现触摸屏单点实验-移植tslib和qt
  • 【JSON2WEB】07 Amis可视化设计器CRUD增删改查
  • ThreeJs同一个场景多个相机的显示
  • Vue基础篇
  • 计算机视觉基础知识(十六)--图像识别
  • 数仓开发-2023/2/29
  • ipv6过渡技术-IPv4 over IPv6隧道示例
  • SpringBoot约定大于配置
  • DHCP自动获取IP地址实验(华为)
  • 探索Terraform实践:优化基础设施管理
  • MYSQL高级_目录
  • MongoDB获评2023年Gartner®云数据库管理系统“领导者”
  • 基于FastAPI构造一个AI模型部署应用
  • 【Unity】使用ScriptableObject存储数据
  • ChatGPT聊天机器人数据隐私和安全问题
  • MyBatis三个经典问题
  • JavaEE+springboot教学仪器设备管理系统o9b00-springmvc
  • Java项目:37 springboot003图书个性化推荐系统的设计与实现