写点什么

Wormhole 流式处理平台功能介绍

  • 2020-02-13
  • 本文字数:3653 字

    阅读完需:约 12 分钟

Wormhole流式处理平台功能介绍

Flow、Namespace 等相关概念的具体定义,从文章中我们得知,Wormhole 作为实时流式处理平台,其设计思想最终是为流上处理数据而服务的。在本文中,我们主要从 Wormhole 的功能设计入手,重点介绍 Wormhole 所支持的几个基本功能。


Wormhole 支持的功能很多,如图 1 所示,除了流式数据处理,Wormhole 在管理和运维等方面也做的比较完善。下面我们从流式处理、平台管理、数据质量、数据安全以及运维监控五个维度来介绍 Wormhole 的具体功能。


1531724947458077102.png


图 1


一、流式处理


Wormhole 的核心是流式处理,并将流式处理抽象为 Flow(流式处理逻辑管道,具体参见:#Wormhole# 流式处理平台设计思想)。Flow 的引入,使得一个 Spark Streaming 上可以跑不同的处理逻辑,也就是多个 Flow 可以在一个 Spark Streaming 上同时执行而互不影响。这种异构逻辑的并行处理大大提高了资源利用率,也提高了流式处理的易用性。


1531724983258085430.png


图 2


如图 2 所示,Flow 从处理过程角度分为解析、转换、写入三个过程,具体如下:


解析


Flow 支持多种消息协议,UMS 和用户自定义 JSON 两种消息协议:


· UMS


UMS 是 Flow 支持的标准消息协议,在设计思想的文章中有介绍,这里不再介绍。(参见:#Wormhole# 流式处理平台设计思想


· 自定义 JSON


开源后,为了适配用户已有系统的数据格式需求,Flow 开始支持用户自定义 JSON 消息协议,使用也比较方便简单,只要在页面贴一个 JSON 消息例子,就会自动解析,然后通过点击配置即可完成自定义 JSON 的 Schema 的定义。


转换


这里的转换主要指对流上指定的 Namespace 的数据进行处理,处理方式包括 Transform SQL(包含 Spark SQL、Lookup SQL、Stream Join SQL)和接口扩展等,并且所有操作都可以有多项,即一个 Flow 中可以有多个 Spark SQL,多个 Lookup SQL,多个接口扩展等,具体如下:


· Spark SQL


利用 Spark 天然支持的 SQL 对数据做一些 map 操作,用户指需要在页面编写 SQL 即可实现实时对流上数据的 Spark SQL 处理。


· Lookup SQL


Lookup SQL 是指将流上指定 Namespace 数据按某个或某几个字段 join 外部实体数据系统的数据,也就是将流上的数据加列处理,在页面编写 SQL 即可实现对流上数据的 Lookup 操作。目前支持多种 Lookup SQL 数据系统,包括 Mysql、Oracle、Postgresql、SQLServer、Cassandra、Mongodb、Phoenix、ElasticSearch、Vertical、KUDU、Redis、Hbase,除了 Redis 和 Hbase 写法是类 SQL 写法之外,其他都支持 SQL 写法。下面举例介绍 SQL 的编写:


✔ 单字段关联:


select col1, col2, … from tableName where colA in namespace.X;


✔ 多字段关联:


select col1, col2, … from tableName where (colA,colB) in (namespace.X,namespace.Y);


✔ Redis


因 Redis 不是结构化存储方式,所以只能模仿 SQL 写法:


Redis 的 value 是字符串时:select name:type as n1 from default(simple) joinby (key1+’_’+key2);


Redis 的 value 是 JSON 串时:select name:int,name:string,name:long from default(json) joinby (key1+’_’+key2);


✔ HBase


考虑到 HBase 的性能,只支持根据 Rowkey Lookup:


select h1:string as hx,h3:string from test_lookup(cf1) joinby mod(hash(sub(reverse(md5(id2)),6)),1000)/value(id2+’_’);


mod/hash/sub/reverse/md5 都是考虑数据倾斜问题对 rowkey 的数据进行的处理;


✔ Stream Join SQL


Stream Join SQL 是指将流上的两个 Namespace 的数据做 Join 操作,即将流上的数据 Namespace A 去 Join 流上的数据 Namespace B,得到一个宽表。


✔ Transform 扩展接口


虽然通过 SQL 已经可以解决大部分数据处理逻辑需求,但是为了满足一些个性化逻辑的应用,Flow 定义了标准的扩展接口,用户实现接口即可编写自定义逻辑,并且可以与 Transform SQL 在一个 Flow 里同时使用。


✔ Event Time Strategy


基于事件时间,根据数据状态做的一些策略,目前支持在一段时间后,数据某些字段不符合条件时,可以做一些处理的选择。主要针对的场景是当 Lookup 时,如果关联的数据不存在(延迟等原因),那么就可以将未 Lookup 到的数据缓存一段时间,直到超时。


✔ UDF 热加载


因 Spark SQL 支持 UDF,Wormhole 也支持了 UDF,并且支持热加载,即在不停 Spark Streaming 的情况下,加载 UDF 的 jar 包和类,并使用 UDF。


写入


写入是指将流上处理好的数据写入到指定的数据系统中。


· 多种 Sink 写入


目前支持主流的关系型数据库和 NoSQL 系统,包括 Mysql、Oracle、HBase、Kafka、ElasticSearch、MongoDB、Cassandra、KUDU。


· Sink 写入方式多样


可以根据用户配置确定数据的写入方式,目前支持追加和幂等写入。追加是指将所有数据 insert 到数据系统中,不区分数据状态;幂等是指 Wormhole 接收到的数据包括 insert/update/delete 状态,但能够保证与源数据一致状态的写入到数据系统中(如果 Kafka 中数据能保证顺序则支持强一致性,否则支持最终一致性)。


· Sink 接口扩展


Wormhole 虽然已经支持了主流的存储系统,但为了更好的兼容性,Flow 定义了标准的写入接口,用户可以根据自己的需求实现写入逻辑。


二、平台管理


Wormhole 提供了一个可视化操作的 web 系统—Rider,用来对各项配置和流程进行统一管理。同时也可以对外提供 Restful 方式操作 Wormhole Stream 和 Wormhole Flow。并且通过 Rider 来管理和配置多租户等,具体功能可以参考我们的《Wormhole 用户手册》。


https://edp963.github.io/wormhole/


三、数据质量


互联网公司中存在着大量数据,并且数据依然以很快的速度增长。其中,金融数据的质量异常重要,这一点与互联网其他数据有很大的不同。Wormhole 在这方面做了很多工作。


数据一致性


Wormhole 可以保证数据的最终一致性,这一点主要是通过幂等、数据备份和回灌等方式来保证。


异常反馈


当在计算过程中,如果出现异常,则 Wormhole 就会把相关的 Flow、起止 offset、event time 等信息反馈给监控系统,然后可以手动对错误进行处理。


端到端比对


为了验证数据的一致性,实现了一个端到端实时比对的插件,在 Flow 进行中即可数据比对,并且不影响 Flow 执行。


数据回灌


Wormhole 提供了数据备份的能力,将数据以文本形式写入到 HDFS 上。同时 Wormhole 也支持将备份的数据按一定条件(起止时间等)将数据回灌到对应的 topic 中,然后让 Wormhole 再消费一次。比如有异常反馈时,可以手动的将对应数据重新回灌到对应 topic 中,然后 Wormhole 可以幂等的将数据写入到各个数据系统,保证数据最终一致性。


四、数据安全


金融数据是非常敏感的,那么平台化就要保证数据的安全,在这方面,Wormhole 通过权限控制、数据隔离和脱敏加密等方式保证了数据安全:


权限控制


Wormhole 定义了三种类型用户,分别为管理员用户(admin)、普通用户(user)和第三方系统用户(app)。admin 用户负责管理数据资源的连接地址,UDF jar 包,其他用户等信息。user 用户负责管理流式执行引擎和业务逻辑。app 用户代表通过第三方系统与 wormhole 集成的用户,具有部分 user 用户的能力。通过权限的控制,实现了功能的约束,进而保证数据安全。


数据隔离


所有数据都是通过 Namespace 定义的,user 用户可以使用哪些数据(Namespace)资源是由 admin 分配的,user 用户登录到系统后,只能使用 admin 用户为其授权的数据(Namespace),也就实现了数据隔离。


脱敏加密


金融数据的一些信息需要进行加密才能对其他项目提供,那就可以在流上直接处理,通过 UDF 对某些字段进行加密、加盐等等,保证使用方看到的数据是脱敏的,进而保证敏感信息不外泄。


五、运维监控


实时动态管理


实时动态管理包括两方面,一方面是可以对 Flow 的相关配置进行实时管理,并且实时生效,这一点主要是使用了 Zookeeper 的能力;另一方面主要是针对 Spark 不支持的一些功能进行了扩展,包括不停 Spark Streaming 时,动态加载与注册 UDF、和动态管理接入的 Topic。


生命周期管理


Wormhole 的 Stream 和 Flow 分别设计了一套有限状态机,也就是为两者分配了生命周期,保证操作的正确性。


性能监控


通过每个 batch 的每个 Flow 处理情况的 Feedback 信息,可以对每个 batch 的延迟情况、吞吐量、数据量等实时监控。


硬件资源隔离


主要从两个层次实现,一个是每个项目可以使用多少资源(CPU/内存)都是分配的,超过时无法启动新的 Stream;另一个是每个 Spark Streaming 应用的资源是指定的,并且由 Yarn 分配,就是说 Spark Streaming 应用本身已经是资源隔离的。


流式处理支持异构逻辑的并行处理,提高了资源利用率;可视化操作的 web 系统统一管理各项配置和流程;数据质量通过“异常反馈”、“数据回灌”等方式得到了极大保障;数据安全也因“权限控制”、“数据隔离”、“脱敏加密”等方式得以实现。在介绍 Wormhole 的功能篇中,我们了解了 Wormhole 所支持的几个重要功能。那么 Wormhole 的设计细节具体是怎样来实现的呢?在 Wormhole 系列的第三篇文章中,我们会讲解其设计细节中的几个关键点,敬请大家期待~


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/158


2020-02-13 21:511169

评论

发布
暂无评论
发现更多内容

一块显存为 12GB 的 GPU 卡能够在CST 时域求解器仿真的最大网格数是多少?

思茂信息

cst cst使用教程 cst操作 cst电磁仿真 cst仿真软件

大语言模型技术原理

NineData

AIGC ChatGPT AI大语言模型 大语言模型 技术原理

Spring Boot实现第一次启动时自动初始化数据库

Java spring Spring Boot

Flutter三棵树系列之BuildOwner | 京东云技术团队

京东科技开发者

flutter 移动开发 源码解读 企业号 5 月 PK 榜 BuildOwner

使用 Node.js、Socket.IO 和 GPT-4 构建 AI 聊天机器人

devpoint

node.js websocket GPT-4

刚入职的后端开发问我SpringBoot如何跨域配置?我表示

Java你猿哥

Java Spring Boot ssm 跨域

500行代码手写docker-实现硬件资源限制cgroups

蓝胖子的编程梦

容器 k8s ,docker Cgroups #k8s

MatrixOne 助力开启分布式计算格局新征程

MatrixOrigin

分布式数据库 HTAP MatrixOrigin MatrixOne 矩阵起源

如何将千亿文件放进一个文件系统,EuroSys'23 CFS 论文背后的故事

百度Geek说

数据库 云计算 百度 企业号 5 月 PK 榜

kafka集群是如何选择leader,你知道吗?

JAVA旭阳

kafka

Git入门指南:从新手到高手的完全指南

小万哥

git Linux 程序员 后端 C/C++

硬核!阿里2023版Spring全家桶进阶笔记流出,堪称Java跳槽神器

Java你猿哥

spring Spring Boot spring security Spring全家桶 Spring Cloud Aliababa

解锁人机交互新技术 华为开发者联创日·全栈AI黑客松大赛等你来

说山水

5月书讯 | 《这就是ChatGPT》来了!

图灵教育

数学 书单 GPT

前端开发如何更好的避免样式冲突?级联层(CSS@layer)

vivo互联网技术

CSS 级联 @layer

2023数博会丨软通智慧发布“一屏统揽”TongView 数字政府慧治平台解决方案

说山水

5月书讯 | 《这就是ChatGPT》来了!

图灵社区

数学 书单 书单推荐 GPT

如何避免写重复代码:善用抽象和组合

阿里技术

Java 代码实战

Kafka集群是如何选择leader,你知道吗?

Java kafka 集群

4 种 MySQL 同步 ES 方案,yyds!

Java你猿哥

Java MySQL sql elasticsearch Binlog

深度理解:Redis Hash(散列表)实现原理

Java你猿哥

redis 开源 ssm hash 散列表

Health Kit文档大变样,一起尝鲜!

HarmonyOS SDK

HMS Core

GitHub上开源24小时获星96K的,从零到实战Java架构师成长手册

Java你猿哥

架构 架构师 高可用架构 高性能架构 高可扩展

引领下一代云计算技术的变革:无服务器架构

xfgg

云计算 severless

GitHub发布即百万!字节内网超实用 java性能优化手册,star超十万

Java你猿哥

Java ssm jvm调优 Java性能优化

如何科学地利用MTTR优化软件交付流程?

SEAL安全

DevOps MTTR 企业号 5 月 PK 榜

Solaris Network:BSC上首个链上合成资产解决方案

鳄鱼视界

阿里大神级Elasticsearch学习笔记,还学不会就埋了

Java elasticsearch 分布式搜索引擎 ES

阿里架构组分布式架构技术使用心得:全在这一份文档里面了

Java你猿哥

架构 分布式 ssm 分布式架构 安全架构

一次错误的解码处理导致Netty堆外内存泄漏问题的分析

Java你猿哥

Java Netty ssm RSS 逻辑

从7天到1天,Kyligence 和亚马逊云科技助力欣和提高数据应用价值

Kyligence

数字化转型 指标平台

Wormhole流式处理平台功能介绍_行业深度_赵平_InfoQ精选文章