项目收获总结--大数据量存储架构设计方案

项目收获总结--大数据量存储架构设计方案

  • 一、背景
  • 二、数据存储层技术选型
    • 2.1 MySQL
    • 2.2 MongoDB
    • 2.3 HBase
    • 2.4 HBase+ElasticSearch
  • 三、HBase+ElasticSearch基本原理
    • 3.1 前置考虑
    • 3.2 HBase+ElasticSearch优点
    • 3.3 HBase+ElasticSearch缺点
  • 四、HBase+ElasticSearch数据一致性架构
    • 4.1 HBase + WAL + ES 实现数据一致性
      • 4.1.1 实现方案
      • 4.1.2 缺陷
    • 4.2 HBase + kafka+ ES 实现数据一致性
  • 五、HBase集群间数据同步replication

一、背景

在这里插入图片描述

公司的业务数据规模庞大,经过多年的业务积累和业务迭代,已经达到百亿级,各个业务线错综复杂,接口调用杂乱无章,而最近的项目是做智能营销推荐系统,需要海量数据计算画像和实时计算做智能产品推荐,但是数据分布和来源非常杂乱,出现A向B要数据,B向C请求接口,C向A需求服务,各个业务线互相依赖的情况。由于项目需要设计一套数据中心来实现资源整合、数据的整合、形成统一的海量数据服务的效率提升方案。

二、数据存储层技术选型

解决大数据量的存储,并能实现大数据量秒级查询, 首先要进行数据存储层技术选型.,考虑四种方案。

2.1 MySQL

Mysql数据量到千万级别时,响应时间提高很多和吞吐量下降很多,需要分库分表或者分片。属于CA,同时满足一致性(C,Consistency)、可用性(A, Availability)。
不推荐MySQL。

2.2 MongoDB

MongoDB用于存储非结构化数据,极其擅长存储json格式的数据或一些很难建索引的文本数据。
MongoDB存储量约10亿级,数据量再大就需要另外分库,否则性能快速下降。
即是:MongoDB更擅长存储需要在线访问的NOSQL文档,并且通过索引,更善于做查询,更像传统的关系型数据库,存储能力弱。MongoDB属于CP,同时满足一致性(C,Consistency)、分区容错性(P,Partition Tolerance)。
而很多公司都不选用MongoDB因为一旦数据量过大,再去改结构很复杂。比如京东架构就把MongoDB用MySQL+Redis替代

2.3 HBase

构建在HDFS之上的分布式、面向列的NOSQL存储系统,可进行实时大规模数据集的读写操作,存储量可达百亿及以上,且对写入效率,hbase由于只维护一个主键,写入效率要比MongoDB这种要维护所有索引的数据库快得多;再考虑服务器的数量上,HBase占用两台机器能完成的事情,MongoDB要占用更多机器。总之现在很多公司都选用HBASE,更偏向非关系型数据库,扩展储存能力强。

但HBase的语法非常固化,擅长rowkey的快速查询,但不擅长模糊匹配查询(前模糊或全模糊),即便在HBase上装载phoneix,在处理复杂查询时,依旧改观不大。

2.4 HBase+ElasticSearch

考虑到若最开始数据存储在HBase上,当业务越来越复杂,数据量越来越大时,使用HBase构建复杂的查询很难实现,甚至导致很多指标无法完成,决定使用ElasticSearch架构在HBase之上。
海量的数据存储使用HBase,数据的即席查询(快速检索)使用ElasticSearch。架构如图:
在这里插入图片描述

三、HBase+ElasticSearch基本原理

将Elasticsearch的DOC ID和Hbase的rowkey相关联。
写数流程:数据接入时,创建统一且全局唯一的ID, 既当Elasticsearch的DOC ID, 也当Hbase的rowkey,数据先写入 HBase,再发送Kafka 消息, 异步写入ES。
取数流程:ES先根据条件查询到分页数据,或者是list里面封装的是那个所有实体类、然后遍历得到id(即拿到rowkey),再去查HBase抽取数据,然后封装Entity,最后返回List。

3.1 前置考虑

一批数据在ElasticSearch中构建索引的时候,针对每一个字段要分析是否存储和是否构建索引。这个需要根据元数据进行考虑和控制

3.2 HBase+ElasticSearch优点

将两个组件各自的优势组合起来:

  • 发挥Elasticsearch全文检索的优势,能快速根据关键字检索出相关度最高的结果;
  • 减少Elasticsearch的存储压力,这种场景下不需要存储检索无关的内容,甚至可以禁用_source,节约一半的存储空间,同时提升最少30%的写入速度;
  • 避免Elasticsearch大数据量下查询返回慢的问题,大数据量下HBase的抽取速度明显优于Elasticsearch;
  • HBase支持动态列,ES也支持动态列,ES可以做HBase的外置索引,整合很融洽。

3.3 HBase+ElasticSearch缺点

(1)组件间存在时效不一致问题

ElasticSearch的入库速度肯相对而言要快于HBase,这需要业务容忍一定的时效性,对业务的要求会比较高。

(2)增加两个组件管理成本

四、HBase+ElasticSearch数据一致性架构

HBase 和 ES 的数据一致性,有两种方案:

HBase + WAL + ES
HBase + Kafka + ES

4.1 HBase + WAL + ES 实现数据一致性

WAL(Write-Ahead Log)预写日志是一个保险机制。在HBase 将数据写入Memstore前就先写入WAL,若发生故障,Memstore内存存储得数据丢失后,也可通过WAL将丢失的数据恢复。

4.1.1 实现方案

设置 HBase 的 WAL 日志位置: 在 HBase 的配置文件 hbase-site.xml 中配置 WAL 日志路径。

<property><name>hbase.regionserver.hlog.dir</name><value>/hbase/wal</value>
</property>

编写 WAL 日志解析服务: 编写一个独立的服务,定期读取 WAL 日志文件,解析其中的写操作,并同步到 Elasticsearch。
同步到 Elasticsearch:在解析服务中,将提取的数据变更信息写入到 Elasticsearch。

4.1.2 缺陷

WAL层不太好控制和监控,
ES消费WAL的存在效率问题

4.2 HBase + kafka+ ES 实现数据一致性

在数据写完HBase之后,即对外响应Success,并异步将数据推至Kafak队列中等待ES去二次消费;写入ES失败则对外抛出异常,要保证写入HBase要么成功,要么失败。
在ES消费层,可以动态指定消费线程数量。当Kafka Lag堆积超过一定阈值(阈值可进行Group级调节和监控),会进行警报,并动态调整消费线程数。只保证数据最终一致性。
当数据写入HBase成功之后,会对写Kafka和写ES进行链路追踪,任何一个环节出现写入失败,就将Failed Key存入Redis,对于失败的数据,开启定时调度线程去扫描这些Key并进行自动回补索引。
回补方式是:到HBase中拿最新的数据再次写入队列中去。
若再次失败,再把这些Key存入Redis,再通过定时调度线程去扫描这些再次失败得数据,若有数据就认为清理。流程图如下:
在这里插入图片描述

五、HBase集群间数据同步replication

正常而言,中小型公司一个HBase应当够用,若HBase需要集群,则有数据同步得需要。
HBase 的复制机制基于 WAL(Write-Ahead Log)。当数据写入到主集群(Master Cluster)时,写操作首先被记录到 WAL 中,然后这些 WAL 日志被传输到从集群(Slave Cluster),从集群再根据这些日志进行数据重放,从而实现数据同步。
HBase中的Replication指的是主备集群间的复制,用于将主集群的写入记录复制到备集群。HBase目前共支持3种Replication:

异步Replication
串行Replication
同步Replication

我采用的是第一种:异步Replication
架构图:
在这里插入图片描述

HBase的replication是以Column Family(列族)为单位的,每个Column Family都可以设置是否进行replication。
一个Master对应3个Slave,Master上每个RegionServer都有一份HLog,在开启Replication的情况下,每个RegionServer都会开启一个线程用于读取该RegionServer上的HLog,并且发送到各个Slave,Zookeeper用于保存当前已经发送的HLog的位置。
Master与Slave之间采用异步通信的方式,保障Master上的性能不会受到Slave的影响。
用Zookeeper保存已经发送HLog的位置,主要考虑在Slave复制过程中如果出现问题后重新建立复制,可以找到上次复制的位置。
在这里插入图片描述
HBase Replication步骤:

1. HBase Client向Master写入数据
2. 对应RegionServer写完HLog后返回Client请求
3. 同时replication线程轮询HLog发现有新的数据,发送给Slave
4. Slave处理完数据后返回给Master
5. Master收到Slave的返回信息,在Zookeeper中标记已经发送到Slave的HLog位置

PS:在进行replication时,Master与Slave的配置并不一定相同,比如Master上可以有3台RegionServer,Slave上并不一定是3台,Slave上的RegionServer数量可以不一样,数据如何分布这个HBase内部会处理。

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

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

相关文章

linux系统设置开机启动的两种方法systemd及rc.local(手工写sh脚本,手工写service服务)

文章目录 知识点实验一、systemd&#xff08;一&#xff09;自写一个sh脚本并加入开机启动&#xff08;二&#xff09;源码安装的nginx加入开机启动 rc.local 知识点 在Linux系统中&#xff0c;有多种方法可以设置开机启动。以下是其中的一些主要方法&#xff1a; systemd 在较…

3.3-LSTM的改进

文章目录 1改进点1.1多层化1.2 dropout1.2.1具体概念1.2.2应该插入到LSTM模型的哪里 1.3权重共享 2改进之后的LSTMLM的代码实现2.1初始化2.2前向计算2.3反向传播 3相应的学习代码的实现4总结 1改进点 1.1多层化 加深神经网络的层数往往能够学习更复杂的模式&#xff1b;因此这…

5种梯度下降法的公式

5种梯度下降法的公式推演&#xff1a; 1. 梯度下降 (Gradient Descent) 梯度下降法的更新公式为&#xff1a; θ t 1 θ t − η ∇ θ J ( θ ) \theta_{t1} \theta_t - \eta \nabla_\theta J(\theta) θt1​θt​−η∇θ​J(θ) 其中&#xff0c; θ t \theta_t θt​…

Tomcat服务器

1.Tomcat定义以及作用 Web服务器是一个应用程序(软件)&#xff0c;对HTTP协议的操作进行封装&#xff0c;使得程序员不必直接对协议进行操作。(不用程序员自己写代码去解析http协议规则&#xff0c;比如不用考虑响应码的问题&#xff0c;以及响应数据应该如何写)&#xff0c;让…

ZK学习笔记

ZK 一.基本概念 Zookeeper是⼀个开源的分布式协调服务&#xff0c;其设计⽬标是将那些复杂的且容易出错的分布式⼀致性服务封装起来&#xff0c;构成⼀个⾼效可靠的原语集&#xff0c;并以⼀些简单的接⼝提供给⽤户使⽤。 zookeeper是⼀个典型的分布式数据⼀致性的解决⽅案&…

在 PostgreSQL 里如何实现数据的冷热数据分层存储的自动化策略调整?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 里如何实现数据的冷热数据分层存储的自动化策略调整 在 PostgreSQL 里如何实现数据的冷…

ip地址是电脑还是网线决定的

在数字化时代的浪潮中&#xff0c;网络已经成为了我们日常生活和工作不可或缺的一部分。当我们谈论网络时&#xff0c;IP地址无疑是一个核心的概念。然而&#xff0c;关于IP地址的分配和决定因素&#xff0c;很多人可能存在误解。有些人认为IP地址是由电脑决定的&#xff0c;而…

mybatisPlus和mybatis的版本冲突问题、若依换成MP、解决git无法推送、使用若依框架的swagger、以后再遇到团队项目应该怎么做。

20240716 一. mybatisPlus和mybatis的版本冲突问题1. 使用前的准备2. 我遇到了一个很严重的问题。3. 解决问题&#xff0c;好吧也没解决&#xff0c;发现问题&#xff01;&#xff01; 二、该死的git&#xff01;&#xff01;&#xff01;&#xff01;1. 解决无法在idea中使用g…

CBSD bhyve Ubuntu 配置vnc登录管理

CBSD介绍 CBSD是为FreeBSD jail子系统、bhyve、QEMU/NVMM和Xen编写的管理层。该项目定位为一个综合解决方案的单一集成工具&#xff0c;用于使用预定义的软件集以最少的配置快速构建和部署计算机虚拟环境。 虽然CBSD没有提供额外的操作系统级功能&#xff0c;但它极大地简化了…

fatal: not a git repository (or any of the parent directories): .git

问题描述&#xff1a; 通过git pull 拉取代码提示&#xff1a; fatal: not a git repository (or any of the parent directories): .git 这个错误信息表明你当前所在的目录不是一个 Git 仓库&#xff0c;或者任何父目录中都没有 .git 目录。 问题解决&#xff1a; 确认当前目…

Windows 、Linux、MacOS 进程管理机制

本心、输入输出、结果 文章目录 Windows 、Linux、MacOS 进程管理机制前言Windows 进程管理机制Linux 进程管理macOS 进程管理内存不够了,几个操作系统如何处理Windows 、Linux、MacOS 进程管理机制 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 …

<数据集>混凝土缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;7353张 标注数量(xml文件个数)&#xff1a;7353 标注数量(txt文件个数)&#xff1a;7353 标注类别数&#xff1a;6 标注类别名称&#xff1a;[exposed reinforcement, rust stain, Crack, Spalling, Efflorescence…

JavaSE从零开始到精通

1.前置知识 JVM&#xff1a;java virtrual machine, java虚拟机, 专门用于执行java代码的一款软件。可以将class文件&#xff0c;转换为机器认识的机器码&#xff0c;因为我们的计算机只认识010101的二进制语言。JRE&#xff1a;java runtime enviroment, java运行时环境, jav…

CMake生成Debug和Release目标程序时的一些配置

文章介绍 本文章将介绍在Windows和Linux平台&#xff0c;生成可执行程序时&#xff0c;如何设置Debug和Release的一些属性。主要介绍如何设置目标程序的生成路径&#xff0c;以及运行时库的设置和目标程序版本号的设置。 Debug和Release模式 -O,-O1: 这两个命令的效果是一样…

C++学习笔记-C++11中的智能指针

1.智能指针介绍 智能指针是C的特性用法&#xff0c;是一个类似指针功能的类对象&#xff0c;其目的是为了更好的管理动态分配的内存&#xff0c;避免出现内存泄漏、悬空指针等问题。C11的标准库里提供了三种智能指针模板类&#xff0c;分别是std::unique_ptr、std::shared_ptr…

深入解析HNSW:Faiss中的层次化可导航小世界图

层次化可导航小世界&#xff08;HNSW&#xff09;图是向量相似性搜索中表现最佳的索引之一。HNSW 技术以其超级快速的搜索速度和出色的召回率&#xff0c;在近似最近邻&#xff08;ANN&#xff09;搜索中表现卓越。尽管 HNSW 是近似最近邻搜索中强大且受欢迎的算法&#xff0c;…

Flutter动画详解第二篇之显式动画(Explicit Animations)

目录 前言 一、定义 1.AnimationController 1.常用属性 1. value 2. status 3. duration 2.常用方法 1.forward 2.reverse 3.repeat 4.stop 5. reset 6. animateTo(double target, {Duration? duration, Curve curve Curves.linear}) 7.animateBack(double ta…

大数据之写入Doris数据问题

1. 解决Key columns should be a ordered prefix of the schema. KeyColumns[1] (starts from zero) is xxx, but 背景 create table if not exists XXX ( fathercorp varchar(50), id decimalv3(38,0) ) ENGINEOLAP UNIQUE KEY(id) COMMENT xxxx DISTRIBUTED BY HASH(id) BUC…

C#实现数据采集系统-实现功能介绍

系统介绍 我们这里主要使用C#( .Net 6)来实现一个数据采集系统&#xff0c;从0到1搭建数据采集系统&#xff0c;从系统分析&#xff0c;功能拆解&#xff0c;到一一实现 数据采集 数据采集是企业信息化和数字化转型过程中的关键环节&#xff0c;它涉及到从生产设备、传感器…

数据结构之细说链表

1.1顺序表的问题以及思考 经过上一篇顺序表的学习&#xff0c;我们知道顺序表还是有很多缺点 顺序表的缺点&#xff1a; 1.中间/头部的插入删除&#xff0c;实际复杂度为O(N) 2.增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间。会有不小的消耗 3.扩容一般…