数栈是云原生—站式数据中台PaaS,咱们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既能够采集静态的数据,也能够采集实时变化的数据,是全域、异构、批流一体的数据同步引擎。你们喜欢的话请给咱们点个star!star!star!mysql
github开源项目:https://github.com/DTStack/fl...git
gitee开源项目:https://gitee.com/dtstack_dev...github
2020年春节期间,一场突如其来的疫情在全国蔓延开来,打破了你们原有的工做生活节奏。疫情期间,你们宅在家就能随时看到实时的大数据疫情地图,能够随时刷到本身当前感兴趣的抖音视频,这一切背后依赖的最重要的技术,就是实时大数据处理技术。sql
如今疫情即将过去,国家提出要加快大数据中心等新型基础设施建设,实时大数据处理平台建设成为企业数智化转型过程当中愈来愈重要的部分。数据库
在大数据处理领域,一般根据数据的不一样性质,将任务划分为实时计算与离线计算,以温度传感器的场景举例:假设某城市安装了大量的温度传感器,每一个传感器每隔1min上传一次采集到的温度信息,由气象中心统一汇总,每隔5分钟更新一次各个地区的温度,这些数据是一直源源不断的产生的,且不会中止。实时计算就主要用于“数据源源不断的产生,并且不会中止,须要以最小的延迟得到计算结果”的场景,这种最小的延迟一般为秒级或分钟级。架构
为了知足这种数据量很大,并且实时性要求又很是高的场景,一般会采用实时计算技术,实时计算的“数据源源不断”的特定决定了其数据处理方式与离线是大相径庭的。
并发
Figure 1 实时计算和离线计算的区别app
离线计算的批量、高延时、主动发起的计算特色不一样,实时计算是一种持续、低延时、事件触发的计算任务。离线计算须要先装载数据,而后提交离线任务,最后任务计算返回结果;实时计算首先要提交流式任务,而后等实时流数据接入,而后计算出实时结果流。
运维
Figure 2 实时计算和离线计算的区别(形象图)分布式
形象点能够理解为离线计算是开着船去湖里(数据库)打渔,实时计算为在河流(数据流)上创建大坝发电。进一步发散,湖泊的造成依赖河流,河流肯定上下边界就是湖泊;其实,离线计算能够理解为实时计算的一种特例。
Figure 3 实时计算能解决的问题
从技术领域来看,实时计算主要用于如下场景:
Figure 4 实时开发的全链路流程
实时采集——使用流式数据采集工具将数据流式且实时地采集并传输到大数据消息存储(kafka等),流式数据存储做为实时计算的上游,提供源源不断的数据流去触发流式计算做业的运行。流数据做为实时计算的触发源驱动实时计算运行。所以,一个实时计算做业必须至少使用一个流数据做为源。每一条进入的流数据将直接触发实时计算的一次流式计算处理。数据在实时计算系统中处理分析后随机写到下游数据存储,下游数据库通常与业务相关,能够用来作实时报表、实时大屏等数据消费。
整个全链路的实时开发中,实时采集是实时计算的上游。对于很对企业而言,自己已经有数据存储系统,可是很大一部分都是离线的关系型数据库。如何将这些离线的关系型数据库的实时增量数据,提供给实时计算去分析,是一个亟需解决的环节。以下图所示,是袋鼠云实时数据采集工具的功能架构。
Figure 5 实时数据采集工具FlinkX数据流程
袋鼠云实时数据采集做为StreamWorks平台的一个模块,有如下功能特色。
袋鼠云实时开发平台(StreamWorks)基于 Apache Flink 构建的云原生一站式大数据流式计算平台,涵盖从实时数据采集到实时数据ETL的全链路流程。亚秒级别的处理延时, Datastream API 做业开发,与已有大数据组件兼容,帮助企业实时数据智能化转型,助力新型基础设施建设。
在以往的数据开发技术栈中,SQL语言能解决大部分业务场景的问题。StreamWorks的核心功能是主打以SQL语义的流式数据分析能力(FlinkStreamSQL),下降开发门槛。提供Exactly-Once的处理语义保证,保证业务精确一致。
Figure 6 StreamWorks功能架构
如上图所示,StreamWorks包含以下几个模块:
Figure 7 StreamWorks平台层级
如上图所示,StreamWorks实时大数据开发平台基于Apache Flink计算引擎,作了一层SQL化的封装,最上层有一个在线开发的IDE平台。平台有如下几个优点点:
FlinkX:自研的批流一体的数据采集工具,已经开源!
Figure 8 传统开发模式 VS StreamWorks开发模式
讲了这么多,咱们的产品到底如何方便你们进行实时业务逻辑开发的,咱们仍是拿最多见的网站流量分析的例子说明下。好比,某网站须要对访问来源进行分析:
以下图所示,从日志服务读取该站点访问日志,解析日志中的来源并检查来源是否在感兴趣的网站列表中(相似来源网站的白名单,保存在MySQL中),统计来自各个网站的流量PV,最终结果写出到MySQL。
Figure 9 业务逻辑流程图
用StreamSQL代码实现的话很是简单,只须要14行伪代码便可搞定。
CREATE TABLE log_source(dt STRING, …) WITH (type=kafka); CREATE TABLE mysql_dim(url STRING, …, PRIMARY KEY(url)) WITH (type=mysql); CREATE TABLE mysql_result(url STRING, …, PRIMARY KEY(url)) WITH (type=mysql); INSERT INTO mysql_result SELECT l.url, count(*) as pv … FROM log_source l JOIN mysql_dim d ON l.url = d.url group by l.url
通常的推荐系统都是基于标签来实现的,基于标签的推荐其实应用很广泛,好比头条,好比抖音,都用到了大量的标签,这样的推荐系统有不少优势,好比实现简单、可解释性好等。如何经过标签来实现实时商品或者内容的推荐呢?
首先一个新的用户在注册app帐号的时候会填写一些比较固定的数据,好比年龄、职业等信息,这些信息能够经过离线计算分析出长期兴趣标签的结果,存储到长期兴趣标签库。用户在最近感兴趣的内容(好比最近10分钟内关注的信息点)能够经过实时计算分析出短时间的兴趣标签结果,而后再经过实时开发的数据流关联维表的功能,把短时间的感兴趣标签和长期兴趣标签库作关联,最终生成新的推荐内容给到客户端,造成一个用户数据流的闭环,从而实现一个简单的实时推荐系统。具体流程以下图所示。
Figure 10 基于StreamWorks构建实时推荐系统
疫情即将过去,生活还要继续。随着“新基建”建设不断深化下去,愈来愈多的实时化场景会出如今咱们生活中。袋鼠云做为新基建解决方案供应商,咱们的口号就是把将来变成如今,在将来会赋能更多的企业实时化转型。