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

OPPO自研DataFlow架构与实践

1. 背景

OPPO很多线上业务每天会产生海量数据,如日志数据、监控数据、调用链数据。我们需要把这些数据进行归类、聚合、过滤、存储。例如将不同的日志数据写入到不同的存储系统中。如果这些日志数据同步写入到数据库中,则会降低服务的性能。如果采用异步发送,先将数据写入本地缓存队列,然后再启动一个线程从队列中获取数据,写入到数据库中,这样处理不会将影响对外服务的性能,但是如果数据量过大时容易造成进程OOM,重启时则数据丢失。

DataFlow是由OPPO互联网自研的一款高性能的数据流采集、聚合和传输框架,它通过将日志写入问题件,同时利用文件系统的顺序写入、内存缓存和内存映射文件技术、预写日志WAL等方式来提高写入的效率。

2、架构

DataEvent

DataEvent是DataFlow端到端传输的基本单元,它由body和headers信息构成,由K-V构成的Map信息,主要用于数据信息的传递。

private Map<String, String> headers = new HashMap<>();private List<T> body = new ArrayList<>();

Source

它是数据源,从特定通道(如Http)接受数据,把消息路由分发到Channel中。开发者通过继承SourceBase实现Source的功能。

Channel

它保存接收到的DataEvent直到它们被所有Sink节点消费完成,Channel传输时需要序列化及反序列化,默认采用的是Kryo,开发者可以根据实际情况使用其它序列化方式,如protobuf。开发者通过继承ChannelBase实现Channel的功能以及序列化和反序列化。

Sink

它主要从Channel中获取数据,将数据传输到下一个目的地,如Elasticsearch、RocksDB。一个Sink有且只有一个Channel。开发者通过继承SinkBase实现Sink的功能。 

用户在使用DataFlow时,需要自己实现继承一个SourceBase的类,调用里面的put方法将DataEvent写入到Channel中。Channel默认采用系统自带的FileChannel,将用户调用的put方法写入的数据存储到本地磁盘中。然后用户只需要调用task方法就可以从Channel中获取数据,进行数据的分析、存储。

3、FileChannel

FileChannel写流程

FileChanel在运行之前,需要配置两个文件夹,一个是数据文件夹,用来存放用户写入的数据和数据的索引信息;另一个是checkpoint文件夹,用来定时持久化元数据信息。

用户写数据之前,需要开启一个事务,事务号由每一个channel来产生,类似于雪花算法。


http://www.kler.cn/a/522428.html

相关文章:

  • C语言练习(29)
  • Python 包管理工具 pip - pip 基础(安装包、升级包、卸载包、查看已安装的包、列出已安装的包)
  • ResNeSt: Split-Attention Networks 参考论文
  • 【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR、流水线及伪指令
  • C++:多继承习题3
  • JavaScript正则表达式
  • RHEL封闭环境部署zabbix
  • 【数据资产】数据资产管理概述
  • Workerman和Swoole有什么区别
  • Verilog中if语句和case语句综合出的电路区别
  • RabbitMQ 多种安装模式
  • 【信息系统项目管理师-选择真题】2013下半年综合知识答案和详解
  • 基于Springboot + vue实现的洗衣店订单管理系统
  • 2025年01月27日Github流行趋势
  • MySQL 日志:undo log、redo log、binlog 概述
  • java基础——专题一 《面向对象之前需要掌握的知识》
  • 一文大白话讲清楚webpack基本使用——18——HappyPack
  • react页面定时器调用一组多个接口,如果接口请求返回令牌失效,清除定时器不再触发这一组请求
  • 【浏览器 - Chrome调试模式,如何输出浏览器中的更多信息】
  • 如何根据壁纸主题选择合适的主色调?
  • 对海康威视工业相机进行取图
  • 产业园管理系统提升企业综合管理效率与智能化水平的成功案例分析
  • 若依路由配置教程
  • 图像处理篇---图像压缩格式编码格式
  • 3.5.3 基于横盘结构的分析体系——缠论(线段)
  • 力扣-链表-24 两两交换链表中的节点