Skip to content

Latest commit

 

History

History
267 lines (111 loc) · 9.5 KB

【NO.244】大数据组件选型对比及架构.md

File metadata and controls

267 lines (111 loc) · 9.5 KB

【NO.244】大数据组件选型对比及架构

1.MQ架构设计及选型对比

1.1 RocketMQ vs Kafka vs Pulsar

RocketMQ: 后台业务开发、高性能及高可靠场景,如阿里双十一电商业务,阿里开源,现在为apache rocketmq;queue模式,支持dead letter queue可延迟投递,pull +push皆可支持。可靠同步+可靠异步传输

Kafka: 分布式日志流传输系统,更多用于大数据领域,顺序磁盘写入、zero-copy等特大幅提升kafka性能,特别适合海量数据传输。计算和存储耦合;streaming模式。仅支持pull模式。

PulsarKafka+RocketMQ,支持streaming+queue模式,既可以用于后台业务开发,如腾讯计费系统-米大师,又可以使用到大数据领域用于数据传递; 支持pull+push模式;支持多租户管理、跨地域复制;存算分离;支持dead-letter-queue,实现延迟发送

1.2 Queue vs Topic

img

img

1.3 RocketMQ架构图

img

发送方式及可靠性:

img

1.4 Kafka架构图

img

img

1.5 Pulsar架构

img

Pulsar消费方式:Streaming + Queuing

img

2.KV架构设计及选型对比

KV存储使用场景高性能缓存,配合数据库完成海量服务的后台设计。具体的KV有多种,具体有如下几种:

mongodb: 可以存储文档doc的kv数据库,在博客系统使用很广泛

redis:延迟极低(5ms),经常用于后台开发的缓存系统,基于内存数据存储,通过持久化化策略AOF、RDB 将数据固化到磁盘;断电有丢失数据风险。常用的结构有hash、map、list、sortedset

hbase: 延迟还可以(500ms),适合海量数据的存储,如日增量200G数据的场景;一般来说hbase运维比较复杂。

rocksdb:高性能KV存储,有广泛的用途,一般以基础建设方式存在,如tidb底层基于rocksdb存储、flink的状态存储也采用rocksdb、阿里高性能的TairDB、美团的Cellar的KV存储等都是基于rocksdb修改和完善

2.1 mongodb集群

img

2.2 redis集群

redis sentinel 哨兵模式

img

redis codis集群模式(豌豆荚开放,刘奇负责开发,后续创建了pingcap公司)

img

redis 3.0 官方支持,最多不能超过1000个节点

img

2.3 Hbase集群

img

3.OLAP架构设计及选型对比

海量数据自由聚合和分析,目前分为两个派系,一类是预聚合好,提供服务的;另外一类是MPP数据库,按需执行计算和聚合。

预聚合类:

kylin: 离线T+1的报表分析,将数仓的数据导出到kylin,做分析和使用

apahe druid: 偏向于实时的olap多维分析,做实时报表和风控;一般可做实时+离线报表;而且维度支持上万列

MPP数据库:

apache doris:MPP数据库,集存储和计算于一体,多表join性能不错。可以做实时+离线的MPP数据库,支持高并发的写入和查询;可以做线性扩容。最初百度开源,商业化公司starrocks

clickhouse:MPP数据库,百亿数据做group by统计秒级返回。俄罗斯公司yandex开放使用。

MPP计算引擎:

presto/impala: 不存储数据,直接以MPP的方式查询存储到Hadoop里面的数据,presto 使用java编写,impala使用c++编写。美团、哈啰等使用presto查询HDFS数据,要比hive自带的mr更快速。

Apache druid架构:

按节点角色分类架构图:

img

数据摄入及服务提供:

img

MPP架构:

大规模并行处理

img

Doris架构:

整体架构:

img

doris上下游生态

img

presto架构:

img

  1. 流式计算框架(flink、kafka streaming、apache nifi、apache beam)对比

flink:分布式低延时、海量数据实时处理框架,生态十分完善,如cep、图计算、flink ml等,是实时计算的标杆

kafka streaming:是一个lib,可以嵌入到程序里面进行实时数据流的处理,不适合处理亿级甚至千万级的数据

apache nifi:很好支持了物联网MQTT协议,可以做物联网边缘端数据的清洗和处理,有图像化操作界面,方便易用,可将数据处理完成后传递到大数据中心如flink集群进行最终处理

apache beam:是一个不强绑定的大数据实时计算、离线计算的SDK,它的代码可以打包部署到flink集群、spark集群、google data cloud platform集群等等,它指定的大数据计算的api,底层运行可以兼容多种框架。

3.1 flink架构:

img

3.2 Kafka Stream

后台程序配合kafka stream lib的程序应用架构

img

后台程序分布式处理:

img

3.3 Apache NIFI

架构图:

img

界面化pipeline操作

img

3.4 Apache Beam:

img

编程语言、批流模式、编程模型、运行Runner

img

4.数据湖选型对比(deltalake、hudi、iceberg)

deltalake:spark后面商业公司databricks开源,跟spark强耦合,是比较早提出数据湖概念,目前市场热度不高,很大一部分公司实时计算使用flink,所以集成度不高。

iceberg: 较为标准的数据湖公司,由uber公司开源,目前有腾讯、阿里、网易、去哪儿网内部使用iceberg构建数据湖;

hudi; uber公司开源的数据湖解决方案,目前使用比较广泛;在googgle云、微软云、IBM云阿里云、腾讯云EMR、亚马逊云EMR等大数据套件提供了对hudi的集成支持,目前像T3出行;hudi背后成立商业公司OneHouse,整体来说,hudi有商业公司加持,发展更好

4.1 hudi 上下游生态:

img

4.2 Flink+iceberg构建实时数据湖:

img

4.3 HTAP选型及对比(Google Spanner+F1、TIDB、CocksRoachDB)

TP和AP数据库很难兼容统一完成,只能不断组合提供更完备的混合型TP+AP的数据库;TiDB和CocksRoachDB都是模仿google的论文Spanner、F1论文完成的。目前TIDB在国内发展很快,tidb很好打造成功了金融级解决方案。cocksroachdb在国外发展不错,主打跨洲际数据复制。

无论tidb还是cockroachdb,从开发之处就支持k8s云原生部署。

Spanner 是Google的全球级的分布式数据库 (Globally-Distributed Database) 。Spanner的扩展性达到了令人咋舌的全球级,可以扩展到数百万的机器,数已百计的数据中心,上万亿的行。

4.4 Google Spanner +F1架构

img

F1+Spanner分布式架构全景图:

img

4.5 TiDB架构

tidb整体架构

img

tidb结合后台程序的整体架构

img

4.6 CockRoachdb 架构:

整体架构:

img

cockroachdb跨洲际数据同步复制:

img

原文作者:鹅厂架构师

原文链接:https://zhuanlan.zhihu.com/p/510249281