精华内容
下载资源
问答
  • 大数据时代的实时流计算简介;主要内容;实时流计算的基础概念;实时流计算的基础概念;实时流计算的基础概念;实时流计算的基本概念;实时流计算的基础概念;实时流计算的基础概念;实时流计算的基础概念;实时流计算的基础...
  • Storm(流计算)技术原理

    万次阅读 2018-06-02 14:26:21
    流计算概述 什么是流数据: 数据有静态数据和流数据。 静态数据: 很多企业为了支持决策分析而构建的数据仓库系统,其中存放的大量历史数据就是静态数据。技术人员可以利用数据挖掘和OLAP(On-Line Analytical...

    流计算概述

    什么是流数据:

    数据有静态数据和流数据。

    静态数据:

    很多企业为了支持决策分析而构建的数据仓库系统,其中存放的大量历史数据就是静态数据。技术人员可以利用数据挖掘和OLAP(On-Line Analytical Processing)分析工具从静态数据中找到对企业有价值的信息。

    这里写图片描述

    图:静态数据的一般处理流程

    流数据:

    近年来,在Web应用、网络监控、传感监测等领域,兴起了一种新的数据密集型应用——流数据,即数据以大量、快速、时变的流形式持续到达。

    • 实例:PM2.5检测、电子商务网站用户点击流

    流数据具有如下特征:

    • 数据快速持续到达,潜在大小也许是无穷无尽的。
    • 数据来源众多,格式复杂。
    • 数据量大,但是不十分关注存储,一旦经过处理,要么被丢弃,要么被归档存储。
    • 注重数据的整体价值,不过分关注个别数据。
    • 数据顺序颠倒,或者不完整,系统无法控制将要处理的新到达的数据元素的顺序。

    批量计算和实时计算:

    对静态数据和流数据的处理,对应着两种截然不同的计算模式:批量计算和实时计算。

    • 批量计算:充裕时间处理静态数据,如Hadoop。
    • 流计算:流数据不适合采用批量计算,因为流数据不适合用传统的关系模型建模。流数据必须采用实时计算响应时间为秒级。在大数据时代,数据格式复杂、来源众多、数据量巨大,对实时计算提出了很大的挑战。因此,针对流数据的实时计算——流计算,应运而生。

    这里写图片描述

    图:数据的两种处理模型

    流计算的概念:

    流计算:实时获取来自不同数据源的海量数据,经过实时分析处理,获得有价值的信息。

    这里写图片描述

    图:流计算示意图

    流计算秉承一个基本理念,即数据的价值随着时间的流逝而降低,如用户点击流。因此,当事件出现时就应该立即进行处理,而不是缓存起来进行批量处理。为了及时处理流数据,就需要一个低延迟、可扩展、高可靠的处理引擎.

    对于一个流计算系统来说,它应达到如下需求:

    • 高性能
    • 海量式
    • 实时性
    • 分布式
    • 易用性
    • 可靠性

    Streaming定义:

    Streaming是基于开源Storm,是一个分布式、实时计算框架。

    特点:

    • 实时响应,低延时。
    • 数据不存储,先计算
    • 连续查询
    • 事件驱动

    传统数据库计算:数据先存储,在查询处理。

    流计算与Hadoop:

    Hadoop设计的初衷是面向大规模数据的批量处理。

    MapReduce是专门面向静态数据的批量处理的,内部各种实现机制都为批处理做了高度优化,不适合用于处理持续到达的动态数据。

    可能会想到一种“变通”的方案来降低批处理的时间延迟——将基于MapReduce的批量处理转为小批量处理,将输入数据切成小的片段,每隔一个周期就启动一次MapReduce作业。但这种方式也无法有效处理流数据。

    • 切分成小片段,可以降低延迟,但是也增加了附加开销,还要处理片段之间依赖关系。
    • 需要改造MapReduce以支持流式处理。

    结论:鱼和熊掌不可兼得,Hadoop擅长批处理,不适合流计算。

    Streaming在FusionInsight中的位置:

    这里写图片描述

    图:Streaming在FusionInsight中的位置

    Streaming是一个实时分布式的实时计算框架,在实时业务汇总有广泛的应用。

    流计算框架:

    当前业界诞生了许多专门的流数据实时计算系统来满足各自需求。

    商业级:IBM InfoSphere Streams和IBM StreamBase。

    开源流计算框架

    • Twitter Storm:免费、开源的分布式实时计算系统,可简单、高效、可靠地处理大量的流数据。
    • Yahoo! S4(Simple Scalable Streaming System):开源流计算平台,是通用的、分布式的、可扩展的、分区容错的、可插拔的流式系统。

    公司为支持自身业务开发的流计算框架:

    • Facebook Puma
    • Dstream(百度)
    • 银河流数据处理平台(淘宝)

    流计算的应用:

    流计算是针对流数据的实时计算,可以应用在多种场景中。如百度、淘宝等大型网站中,每天都会产生大量流数据,包括用户的搜索内容、用户的浏览记录等数据。采用流计算进行实时数据分析,可以了解每个时刻的流量变化情况,甚至可以分析用户的实时浏览轨迹,从而进行实时个性化内容推荐。但是,并不是每个应用场景都需要用到流计算的。流计算适合于需要处理持续到达的流数据、对数据处理有较高实时性要求的场景。

    主要应用于以下几种场景:

    1. 实时分析:如实时日志处理、交通流量分析等。
    2. 实时统计:如网站的实时访问统计、排序等。
    3. 实时推荐:如实时的广告定位、时间营销等。

    流计算处理流程

    概述:

    传统的数据处理流程,需要先采集数据并存储在关系数据库等数据管理系统中,之后由用户通过查询操作和数据管理系统进行交互。

    传统的数据处理流程隐含了两个前提:

    • 存储的数据是旧的。存储的静态数据是过去某一时刻的快照,这些数据在查询时可能已不具备时效性了。
    • 需要用户主动发出查询来获取结果。

    流计算的处理流程一般包含三个阶段:数据实时采集、数据实时计算、实时查询服务

    这里写图片描述
    图:流计算处理流程示意图

    数据实时采集:

    数据实时采集阶段通常采集多个数据源的海量数据,需要保证实时性、低延迟与稳定可靠。

    以日志数据为例,由于分布式集群的广泛应用,数据分散存储在不同的机器上,因此需要实时汇总来自不同机器上的日志数据。

    目前有许多互联网公司发布的开源分布式日志采集系统均可满足每秒数百MB的数据采集和传输需求,如:

    • Facebook的Scribe
    • LinkedIn的Kafka
    • 淘宝的Time Tunnel
    • 基于Hadoop的Chukwa和Flume

    数据采集系统的基本架构一般有以下三个部分:

    这里写图片描述

    图:数据采集系统基本框架
    1. Agent:主动采集数据,并把数据推送到Collector部分。
    2. Collector:接收多个Agent的数据,并实现有序、可靠、高性能的转发。
    3. Store:存储Collector转发过来的数据(对于流计算不存储数据)。

    数据实时计算:

    数据实时计算阶段对采集的数据进行实时的分析和计算,并反馈实时结果。

    经流处理系统处理后的数据,可视情况进行存储,以便之后再进行分析计算。在时效性要求较高的场景中,处理之后的数据也可以直接丢弃。

    这里写图片描述

    图:数据实时计算流程

    实时查询服务:

    实时查询服务:经由流计算框架得出的结果可供用户进行实时查询、展示或储存。

    传统的数据处理流程,用户需要主动发出查询才能获得想要的结果。而在流处理流程中,实时查询服务可以不断更新结果,并将用户所需的结果实时推送给用户。

    虽然通过对传统的数据处理系统进行定时查询,也可以实现不断地更新结果和结果推送,但通过这样的方式获取的结果,仍然是根据过去某一时刻的数据得到的结果,与实时结果有着本质的区别。

    可见,流处理系统与传统的数据处理系统有如下不同

    1. 流处理系统处理的是实时的数据,而传统的数据处理系统处理的是预先存储好的静态数据。
    2. 用户通过流处理系统获取的是实时结果,而通过传统的数据处理系统,获取的是过去某一时刻的结果。
    3. 流处理系统无需用户主动发出查询,实时查询服务可以主动将实时结果推送给用户。

    开源流计算框架Storm

    Storm简介:

    Twitter Storm是一个免费、开源的分布式实时计算系统,Storm对于实时计算的意义类似于Hadoop对于批处理的意义,Storm可以简单、高效、可靠地处理流数据,并支持多种编程语言。

    Storm框架可以方便地与数据库系统进行整合,从而开发出强大的实时计算系统。

    Twitter是全球访问量最大的社交网站之一,Twitter开发Storm流处理框架也是为了应对其不断增长的流数据实时处理需求。

    Storm的特点:

    Storm可用于许多领域中,如实时分析、在线机器学习、持续计算、远程RPC、数据提取加载转换等。

    Storm具有以下主要特点:

    • 整合性
    • 简易的API
    • 可扩展性
    • 可靠的消息处理
    • 支持各种编程语言
    • 快速部署
    • 免费、开源

    系统架构:

    这里写图片描述

    图:流计算系统架构图

    基本概念:

    Storm主要术语包括Streams、Spouts、Bolts、Topology和Stream Groupings.

    • Topology:Streaming中运行的一个实时应用程序。

    • Nimbus:负责资源分配和任务调度。

    • Supervisor:负责接收Nimbus分配的任务,启动和停止属于自己管理的worker进程。

    • Worker:Topology运行时的物理进程。每个Worker是一个JVM进程。

    • Spout:Storm认为每个Stream都有一个源头,并把这个源头抽象为Spout。

      在一个Topology中产生源数据流的组件。

      通常Spout会从外部数据源(队列、数据库等)读取数据,然后封装成Tuple形式,发送到Stream中。Spout是一个主动的角色,在接口内部有个nextTuple函数,Storm框架会不停的调用该函数。

    • Bolt:在一个Topology中接收数据后然后执行处理的组件。

    • Task:Worker中每一个Spout/Bolt的线程称为一个Task。

    • Tuple:Streaming的核心数据结构,是消息传递的基本单元,不可变Key-Value对,这些Tuple会以一种分布式的方式进程创建和处理。

    • Stream:Storm将流数据Stream描述成一个无限的Tuple序列,这些Tuple序列会以分布式的方式并行地创建和处理。即无界的Tuple序列

    • Zookeeper:为Streaming服务中各自进程提供分布式的协作服务、主备Nimbus、Supervisor、Worker将自己的信息注册到Zookeeper中,Nimbus据此感知各个角色的监控状态。

    Topology介绍:

    这里写图片描述

    图:Topology示意图

    Storm将Spouts和Bolts组成的网络抽象成Topology,它可以被提
    交到Storm集群执行。Topology可视为流转换图,图中节点是一个Spout或Bolt,边则表示Bolt订阅了哪个Stream。当Spout或者Bolt发送元组时,它会把元组发送到每个订阅了该Stream的Bolt上进行处理。

    Topology里面的每个处理组件(Spout或Bolt)都包含处理逻辑, 而组件之间的连接则表示数据流动的方向。

    Topology里面的每一个组件都是并行运行的:

    • 在Topology里面可以指定每个组件的并行度,Storm会在集群里面分配那么多的线程来同时计算。

    • 在Topology的具体实现上,Storm中的Topology定义仅仅是一些Thrift结构体(二进制高性能的通信中间件),支持各种编程语言进行定义。

    一个Topology是由一组Spout组件(数据源)和Bolt组件(逻辑处理)通过Stream Groupings进行连接的有向无环图(DAG)。

    业务处理逻辑被封装进Streaming中的Topology中。

    Worker介绍:

    这里写图片描述

    图:Worker Process示意图

    Worker:一个Worker是一个JVM进程,所有的Topology都是在一个或者多个Worker中运行的。Worker启动后是长期运行的,除非人工停止。Worker进程的个数取决于Topology的设置,且无设置上限,具体可获得并调度启动的Worker个数则取决于Supervisor配置的slot个数。

    Executor:在一个单独的Worker进程中会运行一个或多个Executor线程。每个Executor只能运Spout或者Bolt中的一个或多个Task实例。

    Task:是最终完成数据处理的实体单元。

    Task介绍:

    这里写图片描述

    图:Task示意图

    Topology里面的每一个Component(组件)(Spout/Blot)节点都是并行运行的。在Topology里面,可以指定每个节点的并发度,Streaming则会在集群里分配响应的Task来同时计算,以增强系统的处理能力。

    消息分发策略(Stream Groupings):

    Groupings:Storm中的Stream Groupings用于告知Topology如何在两个组件间(如Spout和Bolt之间,或者不同的Bolt之间)进行Tuple的传送。每一个Spout和Bolt都可以有多个分布式任务,一个任务在什么时候、以什么方式发送Tuple就是由Stream Groupings来决定的。

    目前,Storm中的Stream Groupings有如下几种方式:

    1. ShuffleGrouping:随机分组,随机分发Stream中的Tuple,保证每个Bolt的Task接收Tuple数量大致一致。
    2. FieldsGrouping:按照字段分组,保证相同字段的Tuple分配到同一个Task中。
    3. AllGrouping:广播发送,每一个Task都会收到所有的Tuple。
    4. GlobalGrouping:全局分组,所有的Tuple都发送到同一个Task中。
    5. NonGrouping:不分组,和ShuffleGrouping类似,当前Task的执行会和它的被订阅者在同一个线程中执行。
    6. DirectGrouping:直接分组,直接指定由某个Task来执行Tuple的处理。

    这里写图片描述

    Storm框架设计:

    Storm集群采用“Master—Worker”的节点方式:

    • Master节点运行名为“Nimbus”的后台程序(类似Hadoop中的“JobTracker”),负责在集群范围内分发代码、为Worker分配任务和监测故障。

    • Worker节点运行名为“Supervisor”的后台程序,负责监听分配给它所在机器的工作,即根据Nimbus分配的任务来决定启动或停止Worker进程,一个Worker节点上同时运行若干个Worker进程。

    • Storm使用Zookeeper来作为分布式协调组件,负责Nimbus和多个Supervisor之间的所有协调工作。借助于Zookeeper,若Nimbus进程或Supervisor进程意外终止,重启时也能读取、恢复之前的状态并继续工作,使得Storm极其稳定。

    这里写图片描述

    图:Storm集群架构示意图

    Nimbus并不直接和Supervisor交换,而是通过Zookeeper进行消息的传递。

    Storm和Hadoop架构组件功能对应关系:

    Storm运行任务的方式与Hadoop类似:Hadoop运行的是MapReduce作业,而Storm运行的是“Topology”。

    但两者的任务大不相同,主要的不同是:MapReduce作业最终会完成计算并结束运行,而Topology将持续处理消息(直到人为终止)。

    这里写图片描述

    图:Storm和Hadoop架构组件功能对应关系

    Storm工作流程:

    这里写图片描述

    图:Storm工作流程示意图

    Storm工作流程为:

    1. 提交Topology
    2. 将任务存储在Zookeeper中
    3. 获取分配的任务,并启动Worker
    4. Worker进程执行具体的任务

    所有Topology任务的提交必须在Storm客户端节点上进行,提交后,由Nimbus节点分配给其他Supervisor节点进行处理。

    Nimbus节点首先将提交的Topology进行分片,分成一个个Task,分配给相应的Supervisor,并将Task和Supervisor相关
    的信息提交到Zookeeper集群上。

    Supervisor会去Zookeeper集群上认领自己的Task,通知自己的Worker进程进行Task的处理。

    Streaming提供的接口:

    REST接口:(Representational State Transfer)表述性状态转移接口。

    Thrift接口:由Nimbus提供。Thrift是一个基于静态代码生成的跨语言的RPC协议栈实现,它可以生成包括C++,Java,Python, Ruby , PHP等主流语言的代码实现,这些代码实现了RPC的协议层和传输层功能,从而让用户可以集中精力与服务的调用和实现。

    Streaming的关键特性介绍

    Nimbus HA:

    这里写图片描述

    图:Nimbus HA架构
    • 使用Zookeeper分布式锁:

      Nimbus HA的实现是使用Zookeeper分布式锁,通过主备间争抢模式完成的Leader选举和主备切换。

    • 主备间元数据同步:

      主备Nimbus之间会周期性的同步元数据,保证在发生主备切换后拓扑数据不丢失,业务不受损。

    容灾能力:

    这里写图片描述

    图:容灾示意图

    容灾能力:节点失效,自动迁移到正常节点,业务不中断。

    整个过程无需人工干预!

    消息可靠性:

    这里写图片描述

    在Streaming里面一个Tuple被完全处理的意思是:这个Tuple所派生的所有tuple都被成功处理。如果这个消息在Timeout所指定的时间内没有成功处理,这个tuple就被认为处理失败了。

    可靠性级别设置:

    ​ 如果并不要求每个消息必须被处理(允许在处理过程中丢失一些信息),那么可以关闭消息的可靠性处理机制,从而可以获得较好的性能。关闭消息的可靠性机制一位着系统中的消息数会减半。

    有三种方法可以关闭消息的可靠性处理机制:

    1. 将参数Config.TOPOLGY_ACKERS设置为0.
    2. Spout发送一个消息时,使用不指定消息message ID的接口进行发送。
    3. Blot发送消息时使用Unanchor方式发送,使Tuple树不往下延伸,从而关闭派生消息的可靠性。

    ACK机制:

    这里写图片描述

    图:Ack机制
    • 一个Spout发送一个Tuple时,会通知Acker一个新的根消息产生了,Acker会创建一个新的Tuple tree,并初始化校验和为0.
    • Bolt发送消息时间向Acker发送anchor tuple,刷新tuple tree,并在发送成功后向Acker反馈结果。如果成功则重新刷新校验和,如果失败则Acker会立即通知Spout处理失败。
    • 当Tuple tree被完成吹了(校验和为0),Acker会通知Spout处理成功。
    • Spout提供ack()和Fail()接口方法用户处理Acker的反馈结果,需要用户实现。一般在fail()方法中实现消息重发逻辑。

    Streaming与其他组件:

    这里写图片描述

    整合HDFS/HBase等外部组件,将实时结构提供给其他组件,进程离线分析。

    Spark Streaming

    Spark Streaming设计:

    Spark Streaming可整合多种输入数据源,如Kafka、Flume、
    HDFS,甚至是普通的TCP套接字。经处理后的数据可存储至文件
    系统、数据库,或显示在仪表盘里。

    这里写图片描述

    图:SPark Streaming支持的输入、输出数据源

    Spark Streaming的基本原理是将实时输入数据流以时间片(秒级)为单位进行拆分,然后经Spark引擎以类似批处理的方式处理每个时间片数据。

    这里写图片描述

    图:Spark Streaming执行流程

    **Spark Streaming最主要的抽象是DStream(Discretized Stream,离散化数据流),表示连续不断的数据流。**在内部实现上,Spark Streaming的输入数据按照时间片(如1秒)分成一段一段的DStream,每一段数据转换为Spark中的RDD,并且对DStream的操作都最终转变为对相应的RDD的操作。

    这里写图片描述

    图:DStream操作示意图

    Spark Streaming 与 Storm的对比:

    • Spark Streaming和Storm最大的区别在于,Spark Streaming无法实现毫秒级的流计算,而Storm可以实现毫秒级响应。
    • Spark Streaming构建在Spark上,一方面是因为Spark的低延迟执行引擎(100ms+)可以用于实时计算,另一方面,相比于Storm,RDD数据集更容易做高效的容错处理。
    • Spark Streaming采用的小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法,因此,方便了一些需要历史数据和实时数据联合分析的特定应用场合。

    Samza技术原理

    基本概念:

    (1)作业:一个作业(Job)是对一组输入流进行处理转化成输出流的程序。

    (2)分区:

    • Samza的流数据单位既不是Storm中的元组,也不是Spark Streaming中的DStream,而是一条条消息。
    • Samza中的每个流都被分割成一个或多个分区,对于流里的每一个分区而言,都是一个有序的消息序列,后续到达的消息会根据一定规则被追加到其中一个分区里。

    (3)任务:

    • 一个作业会被进一步分割成多个任务(Task)来执行,其中,每个任务负责处理作业中的一个分区。
    • 分区之间没有定义顺序,从而允许每一个任务独立执行。
    • YARN调度器负责把任务分发给各个机器,最终,一个工作中的多个任务会被分发到多个机器进行分布式并行处理。

    (4)数据流图:

    • 一个数据流图是由多个作业构成的,其中,图中的每个节点表示包含数据的流,每条边表示数据传输。
    • 多个作业串联起来就完成了流式的数据处理流程。
    • 由于采用了异步的消息订阅分发机制,不同任务之间可以独立运行。

    这里写图片描述

    图:数据流图

    Samza的系统架构:

    Samza系统架构主要包括:

    1. 流数据层(Kafka)
    2. 执行层(YARN)
    3. 处理层(Samza API)

    流处理层和执行层都被设计成可插拔的,开发人员可以使用其他框架来替代YARN和Kafka。

    这里写图片描述

    图:MapReduce批处理架构和Samza流处理架构对比

    处理分析过程:

    这里写图片描述

    图:处理分析过程图

    处理分析过程如下:

    1. Samza客户端需要执行一个Samza作业时,它会向YARN的ResouceManager提交作业请求。
    2. ResouceManager通过与NodeManager沟通为该作业分配容器(包含了CPU、内存等资源)来运行Samza ApplicationMaster。
    3. Samza ApplicationMaster进一步向ResourceManager申请运行任务的容器。
    4. 获得容器后,Samza ApplicationMaster与容器所在的NodeManager沟通,启动该容器,并在其中运行Samza Task Runner。
    5. Samza Task Runner负责执行具体的Samza任务,完成流数据处理分析。

    Storm、Spark Streaming和Samza的应用场景

    编程的灵活性来讲,Storm是比较理想的选择,它使用Apache Thrift,可以用任何编程语言来编写拓扑结构(Topology)。

    当需要在一个集群中把流计算和图计算、机器学习、SQL查询分析等进行结合时,可以选择Spark Streaming,因为,在Spark上可以统一部署Spark SQL,Spark Streaming、MLlib,GraphX等组件,提供便捷的一体化编程模型

    当有大量的状态需要处理时,比如每个分区都有数十亿个元组,则可以选择Samza。当应用场景需要毫秒级响应时,可以选择Storm和Samza,因为Spark Streaming无法实现毫秒级的流计算。


    以上内容为听华为大数据培训课程和大学MOOC上厦门大学 林子雨的《大数据技术原理与应用》课程而整理的笔记。

    大数据技术原理与应用https://www.icourse163.org/course/XMU-1002335004


    展开全文
  • 流计算产品预研

    千次阅读 2017-11-19 15:39:58
    国内各大云平台现有流计算产品预研

    国内各大云平台现有流计算产品预研

    阿里云

      Alibaba Cloud StreamCompute(阿里云流计算)是运行在阿里云平台上的流式大数据分析平台,提供给用户在云上进行流式数据实时化分析工具。使用阿里云StreamSQL,用户可以轻松搭建自己的流式数据分析和计算服务,彻底规避掉底层流式处理逻辑的繁杂重复开发工作,属于阿里云的大数据基础服务,目前正在公测中。

    产品特点

    • 开发门槛低

        无需用户在流计算框架上进行代码编程以及相关工作,提供了SQL语义的流式数据分析能力(StreamSQL)降低使用门槛

    • 性能优越、功能强大

        关键性能指标超越Storm的6到8倍,数据计算延迟优化到秒级乃至亚秒级,单个作业吞吐量可达百万(记录/秒)级别,单集群规模在数千台;实现exactly once语义

    • 全链路生态

        阿里云提供了全链路流计算开发平台,涵盖从数据采集到数据生产的各个环节,深度整合各类云数据存储,包括DataHub、日志服务(SLS)、RDS、OTS、ADS、IOTHub等各类数据存储系统,无需额外的数据集成工作,阿里云流计算可以直接读写上述产品数据

    • 运维监控快捷简单

        阿里云流计算是完全托管的流式计算引擎,用户隔离、一键式启用、天然集成了数据开发、数据运维、监控预警等服务

    产品定位

    阿里云流计算提供类标准的StreamSQL语义协助用户简单轻松的完成流式计算逻辑的处理。同时,受限于SQL代码功能有限,无法满足某些特定场景的业务需求,阿里云流计算同时为部分授信用户提供全功能的UDF函数。用户使用StreamSQL+UDF可完成大部分流式数据处理分析逻辑,目前流计算更擅长于做流式数据分析、统计、处理,对于非SQL能够解决的领域,例如复杂的迭代数据处理、复杂的规则引擎告警则不适合用现有的流计算产品去解决。

    目前流计算擅长解决的几个领域的应用场景:

    • 实时网络点击PV、UV统计
    • 统计交通卡口的平均5分钟通过车流量
    • 水利大坝的压力数据统计和展现
    • 网络支付涉及金融盗窃固定行为规则的告警

    曾经阿里云流计算对接,但发现无法满足的情况:

    • Oracle存储过程用阿里云流计算替换
    • 现有的Spark作业无缝迁移到流计算
    • 多种复杂规则引擎告警

    最适用于简单编写流计算SQL即可完成自身流式数据分析业务的场景

    全链路计算

      不同于现有的离线/批量计算模型(和批量计算差异性在下一小节细述),流计算全链路整体上更加强调数据的实时性,包括数据实时采集、数据实时计算、数据实时集成。三大类数据的实时处理逻辑在全链路上保证了流式计算的低时延。全链路流计算示意图如下:


    这里写图片描述

    • 数据采集 用户使用流式数据采集工具将数据流式且实时地采集并传输到大数据消息Pub/Sub系统,该系统将为下游流计算提供源源不断的事件源去触发流式计算作业的运行。

    • 流式计算 流数据作为流计算的触发源驱动流计算运行。因此,一个流计算作业必须至少使用一个流数据作为源。一批进入的数据流将直接触发下游流计算的一次流式计算处理。

    • 数据集成 流计算将计算的结果数据直接写入目的数据存储,这其中包括多种数据存储,包括数据存储系统、消息投递系统,甚至直接对接业务规则告警系统发出告警信息。不同于批量计算(例如阿里云MaxCompute或者开源Hadoop),流计算天生自带数据集成模块,可以将结果数据直接写入到目的数据存储

    • 数据消费 流计算一旦将结果数据投递到目的数据源后,后续的数据消费从系统划分来说,和流计算已经完全解耦。用户可以使用数据存储系统访问数据,使用消息投递系统进行信息接收,或者直接使用告警系统进行告警。

    业务流程

    阿里云流计算全流程系统架构情况如下图所示。


    这里写图片描述

    1. 数据采集 广义的实时数据采集指: 用户使用流式数据采集工具将数据流式且实时地采集并传输到大数据Pub/Sub系统,该系统将为下游流计算提供源源不断的事件源去触发流式计算作业的运行。阿里云大数据生态中提供了诸多针对不同场景领域的流式数据Pub/Sub系统,阿里云流计算天然集成上图中诸多Pub/Sub系统,以方便用户可以轻松集成各类流式数据存储系统。例如用户可以直接使用流计算对接SLS的LogHub系统,以做到快速集成并使用 ECS 日志。

    2. 流式计算 流数据作为流计算的触发源驱动流计算运行。因此,一个流计算作业必须至少使用一个流数据作为数据源头。同时,对于一些业务较为复杂的场景,流计算还支持和静态数据存储进行关联查询。例如针对每条DataHub流式数据,流计算将根据流式数据的主键和RDS中数据进行关联查询(即join查询);同时,阿里云流计算还支持针对多条数据流进行关联操作,StreamSQL支持阿里集团量级的复杂业务也不在话下。

    3. 实时数据集成 为尽可能减少数据处理时延,同时减少数据链路复杂度。阿里云流计算将计算的结果数据可不经其他过程直接写入目的数据存储,从而最大程度降低全链路数据时延,保证数据加工的新鲜度。为了打通阿里云生态,阿里云流计算天然集成了OLTP(RDS产品线等)、NoSQL(OTS等)、OLAP(ADS等)、MessageQueue(DataHub、ONS等)、MassiveStorage(OSS、MaxCompute等)。

    4. 数据消费 流式计算的结果数据进入各类数据存储后,用户可以使用各类个性化的应用消费结果数据: 用户可以使用数据存储系统访问数据,使用消息投递系统进行信息接收,或者直接使用告警系统进行告警。

    附: 数据链路情况

    对于上图的数据链路,部分数据存储由于和流计算模型不能一一匹配,需要使用其他类型的流数据做中转,说明如下:

    • DataHub

        DataHub提供了多类数据(包括日志、数据库BinLog、IoT数据流等等)从其他数据存储上传到DataHub的工具、界面,以及和一些开源、商业软件的集成,参看《DataHub相关介绍文档》,即可获取丰富多样的数据采集工具。

    • 日志服务(LogService)

      LogService是针对日志类数据一站式服务,在阿里巴巴集团经历大量大数据场景锤炼而成。LogService提供了诸多的针对日志的采集、消费、投递、查询分析等功能。

    • 物联网套件(IoTHub)

        物联网套件是阿里云专门为物联网领域的开发人员推出的,其目的是帮助开发者搭建安全性能强大的数据通道,方便终端(如传感器、执行器、嵌入式设备或智能家电等等)和云端的双向通信。

        使用IotHub 规则引擎可以将IoT数据方便投递到DataHub,并利用流计算和MaxCompute进行数据加工计算。查看《IoT规则引擎使用》以查看如何将IoT数据推送到DataHub。

    • 数据传输(DTS)

        DTS支持以数据库为核心的结构化存储产品之间的数据传输。 它是一种集数据迁移、数据订阅及数据实时同步于一体的数据传输服务。使用DTS的数据传输功能,可以方便的将RDS等BinLog解析并投递到DataHub,并利用流计算和MaxCompute进行数据加工计算。

    • Message Service

        阿里云消息服务阿里云商用的消息中间件服务,具有大规模,高可靠、高并发访问和超强消息堆积能力的特点。流计算可以直接从消息服务读取流式数据。阿里云流计算对接消息服务当前仍在开发中。

    • MQ

        阿里云MQ服务是企业级互联网架构的核心产品,基于高可用分布式集群技术,搭建了包括发布订阅、消息轨迹、资源统计、定时(延时)、监控报警等一套完整的消息云服务。阿里云流计算对接ONS服务当前仍在开发中。

    主要概念

    阿里云流计算处理的数据来自哪里?如何加载数据到流计算;流计算处理后的结果数据如何继续应用?

    阿里云流计算本身不带有业务存储,所有的数据均是来自于外部周边阿里云提供的存储系统持有的数据。目前阿里云支持几类数据存储类型:

    • 流式的数据输入: 为下游流式计算提供流式数据输入,是流计算进行数据处理的数据触发机制,推动流计算持续进行数据计算。每个流计算作业必须至少声明一个流式数据输入源。

    • 静态数据输入: 静态存储为流计算提供了数据关联查询,对于每条流式数据,可以关联外部一个静态数据源进行查询。因此,静态数据输入也被成为维表。

    • 结果表输出: 流计算将计算的结果数据写出到目的数据表,为下游数据继续消费提供各类读写接口。

    阿里云流计算支持哪几个流式数据输入?维表输入?结果表输出?

    目前支持流式输入表有:

    • 大数据总线(DataHub)

    • 日志服务(LogService)

    支持静态输入表有:

    • 表格存储(TableStore)

    • 云数据库(RDS)

    • 分布式数据库(DRDS)

    支持输出表有:

    • 大数据总线(DataHub)

    • 日志服务(LogService)

    • 消息服务(MessageService)

    • 分析型数据库(AnalyticDB)

    • 表格存储(TableStore)

    • 云数据库(RDS)

    • 分布式数据库(DRDS)

    阿里云流计算提供的编程接口是什么?如何编写流式数据处理逻辑?

    阿里云流计算提供StreamSQL编写业务逻辑,为流式数据分析定制多种数据处理函数和操作符。以Word Count统计为例,下面给出一个具体的SQL例子:

    -- 声明一个流式源表
    create stream table stream_source(word string) ;
    -- 声明一个目标表
    create result table stream_result(word string, cnt bigint) ;
    --统计word次数
    insert into stream_result select
       t.word
       ,count(1)
    from stream_source t
      group by t.word;
    

    单个阿里云流计算作业包含几个部分?

    一个静态的流计算作业目前分为几大类静态信息,包括:

    • 代码: SQL代码,用户编写的业务逻辑,流计算作业核心逻辑,其中包括 输入表DDL声明(分为流式输入表、静态输入表)、输出表DDL声明,以及执行业务逻辑的DML。

    • 参数: 参数用来描述作业运行时指标,例如并发量、批处理数据量等信息。

    • 属性: 作业的业务信息,例如创建人、创建时间等相关记录。

    我存放的数据不在上述支持的存储列表,如何处理?

    如果您所选择的阿里云存储产品不在我们系统支持范围之内,请提交工单告之我们。如果您使用了自建开源存储,需要您将您的数据转移到上述支持的列表存储中。您需要自己搭建相关的转换常驻程序完成上述转换逻辑,例如当前流计算流式数据源输入暂时还不支持阿里云消息服务,那么用户可以选择写应用程序将消息服务中的数据转换为DataHub,再交由流计算读取DataHub进行处理。

    华为云

      实时流计算服务(Cloud Stream Service,简称CS),是运行在华为云上的实时流式大数据分析服务,全托管的方式使用户无需感知计算集群,只需聚焦于Stream SQL业务,即时执行作业,完全兼容Apache Flink API。

      Cloud Stream实时流计算平台是华为公司在IT领域主推的低时延(ms级时延)、高吞吐、高可靠的分布式实时流计算服务。它以Flink为基础,加入华为沉淀的增强特性和安全增强,是一个批流合一的分布式计算服务,提供了数据处理所必须的丰富Stream SQL特性,后续还会支持在Stream SQL上增加机器学习和图计算相关算法的功能,适用于实时性要求高、吞吐量大的业务场景。

    特点和优势

    • 丰富的Stream SQL在线分析能力

        支持window、join等聚合函数,用SQL表达业务逻辑,简便快捷实现业务。

    • 分布式实时计算

        支持大规模集群计算,集群弹性伸缩,最大化节省成本。

    • 易用

        在SQL编辑平台写Stream SQL,Stream SQL定义数据流入、数据处理、数据流出,快速便捷实现业务逻辑,降低流数据分析门槛。

    • 全托管

        用户完全不感知计算集群,对运行的作业可视化查看运行状态。

    • 开箱即用

        不再关心各种大数据框架,写StreamSQL,即时运行作业。

    • 安全隔离

        租户三重安全机制保障,确保作业安全运行,且租户计算集群完全和其他租户物理隔离,独立的安防设置,确保计算集群的安全性。

    • 高吞吐低时延

        从DIS中读取数据,服务支持自然反压机制,支持高吞吐压力;毫秒级延迟,满足实时计算的业务场景。

    产品架构


    这里写图片描述

      在实时业务架构中,流计算服务使用DIS服务作为数据源,用户在流计算服务中提交StreamSQL作为数据处理逻辑,处理结果输出到持久化数据存储,以供下游业务使用。

    • Source数据源

        从DIS服务中读取数据

    • 流式计算

        提供Stream SQLFlink API两种能力,上手成本最低,使用简便

    • Sink数据输出

        分析的结果数据,实时写入DIS(数据接入服务)/ OBS(对象存储服务)等服务,以供下游业务使用

    应用场景

      Cloud Stream服务的使用,聚焦于互联网和物联网场景,适用于实时性要求高、吞吐量大的业务场景。主要应用在互联网行业中小企业/物联网/车联网/金融反欺诈等多种行业应用场景,如,互联网汽车、日志在线分析、在线机器学习、在线图计算、在线推荐算法应用等。

    • 实时流分析场景

        应用:实时大数据分析。

        场景特点:面向流数据,支持window、CEP、Join等复杂的流分析操作,毫秒级延迟。

        适用场景:在线分析,金融风控,交通流量分析,ETL,实时决策。

    • 物联网IOT场景

        应用:物联网在线数据分析。

        场景特点:物联网IoT直接调用Cloud Stream服务API,Cloud Stream可以实时读取传感器信息并执行用户的分析逻辑,分析结果对接到DIS、RDS等服务用于可视化、持久化、告警或报表展示。

        适用场景:电梯IoT、工业IoT、共享单车、互联网汽车和智能家居。

    上下游数据

    • 数据接入服务(DIS)

        数据接入服务(DIS)是Cloud Stream的数据源和作业输出数据的存储地。

      1. 数据源:DIS接入用户数据,Cloud Stream从DIS读取数据,作为作业的输入数据。
      2. 数据的存储地:Cloud Stream将作业的输出数据写入DIS。
      3. 对象存储服务(Object Storage Service)

    • 对象存储服务(OBS)

        可用作CloudStream的数据源和作业Checkpoint数据的备份地。

      1. 数据源:Cloud Stream支持从OBS上读取用户存储的数据,作为作业的输入数据。

      2. 作业Checkpoint数据的备份地:如果作业开启了Checkpoint功能,Cloud Stream支持将作业快照存储到OBS中,以便作业在出现异常时可以从Checkpoint(一致性检查点)恢复作业。

    • 关系型数据库(Relational Database Service)

        关系型数据库(RDS)用于存储Cloud Stream作业输出的结果数据。

    • 与统一身份认证服务的关系

        统一身份认证服务(Identity and Access Management,简称IAM)为Cloud Stream提供了鉴权功能。

    • 云审计服务(Cloud Trace Service)

        云审计服务(CTS)为用户提供Cloud Stream的操作记录,供用户查询、审计和回溯使用。

    注意:

      Cloud Stream支持从DIS上读取编码格式为csv或json格式的数据。

      Cloud Stream只支持从OBS上存放和读取csv格式的数据。

    代码实例

    创建作业并提交

    使用实时流计算服务,首先要创建一个作业,如“JobSample”。

    登录Cloud Stream管理控制台。

    在Cloud Stream管理控制台的左侧导航栏中,单击“作业管理”,进入“作业管理”页面。

    单击“新建”,弹出“新建作业”页面。

    输入“作业名称”和“作业描述”,例如:作业名称为“JobSample”,作业描述为“This is a job sample.”。

    在“作业模板”下拉框中,选择“默认”,使用系统默认的作业模板。

    单击“确定”,进入“作业编辑”页面,在SQL语句编辑区域中会显示“默认”作业模板的SQL语句。

    在SQL语句编辑区域中,根据作业的实际需要,编辑SQL语句。例如:

    /** 创建输入流,从DIS的dis-source-stream通道获取数据,数据编码格式为CSV,分隔符为逗号 **/
    create source stream stream_source (
      name STRING,
      v2 STRING,
      time LONG
    ) WITH (
      type = "dis",
      region = "cn-north-1",
      channel = "dis-source-stream",
      partitionCnt = "3",
      encode = "csv",
      fieldDelimiter = ","
    ) timestamp by proctime.proctime;
    
    /** 创建输出流,结果输出到DIS的dis-sink-stream1通道,若通道有多个partition,以name作为key 派发,输出格式为json,
        enableOutputnull为false表示当属性为null时,该属性不进行输出 **/
    create sink stream stream_sink (
      name STRING,
      v2 STRING
    ) WITH (
      type="dis",
      region="cn-north-1",
      channel = "dis-sink-stream1",
      partitionKey = "name",
      encode = "json",
      enableOutputnull = "false"
    );
    
    /** 创建输出流,结果输出到DIS的dis-sink-stream2通道,若通道有多个partition,以name作为key 派发,输出格式为csv **/
    create sink stream stream_sink2 (
      name STRING,
      cnt BIGINT
    ) WITH (
      type="dis",
      region="cn-north-1",
      channel = "dis-sink-stream2",
      partitionKey = "name",
      encode = "csv",
      fieldDelimiter = ","
    );
    
    /** 直接将入流 stream_source 输出到 stream_sink **/
    insert into stream_sink select name, v2 from stream_source;
    
    /** 计算从运行开始流进来的事件个数 **/
    insert into stream_sink2
    select name, count(v2) OVER (ORDER BY proctime RANGE UNBOUNDED preceding) as cnt1
    from stream_source;
    

    单击“语义校验”,确保语义校验成功。

    在“作业编辑”页面的右侧“运行参数设置”页签,使用默认运行参数即可。

    单击“保存”。

    单击“提交”,将作业发布线上。

    百度云

    无流计算产品

    腾讯云

    大数据处理套件TBDS

      腾讯大数据处理套件(Tencent Big Data Suite)是基于腾讯多年海量数据处理经验,对外提供的可靠、安全、易用的大数据处理平台。您可以按需部署大数据处理服务实现数据处理需求,例如报表展示,数据提取、分析,客户画像等大数据应用。该平台中集成了流式计算

    • 实时流处理计算

        灵活:支持 TStorm(用 Java 语言重写的 Storm 流处理引擎)、Storm 流式任务作业引擎,覆盖实时要求极高的流式作业场景;支持基于 Spark 上的 Spark Streaming,满足毫秒级的实时计算场景需求,如实时推荐、用户行为分析等。

    网易蜂巢

    无流计算产品

    总结

    1. 从国内各大厂家的云计算产品综合比较来看,流计算平台仍然处于起步阶段,相对来说最为成熟完善的阿里云流计算平台也是处于公测中,还有许多根本就没有流计算平台产品推出。

    2. 阿里云流计算平台技术最成熟、架构最为完善、业务场景丰富、用户相对较多

    3. 华为流计算平台与阿里云流计算平台在各方面都较为类似,但是华为的不够成熟、不够规范、架构脉络不清晰、相关资料较少、还处于起步阶段

    4. 腾讯云将流计算集成在大数据开发套件之中,相关资料太少,只知道底层引擎采用的是腾讯自己用java重写的TStrom,另外支持SparkStreaming

    5. 阿里云之前的流计算平台底层引擎采用的是阿里自己改写的Storm(JStorm),最新版本的话与华为一样,底层引擎都选用的是Flink,可见未来的流计算引擎的趋势应该是Flink

    展开全文
  • 流计算概述(一)

    千次阅读 2016-05-14 10:32:58
    何为流计算? 批计算是已经存在一堆数据,需要用一次计算把这堆数据处理完。 而流计算是有一个源源不断的源头,是一个为了无止境的数据集设计的计算框架。 批计算处理的是有界的数据集,而流计算处理的是一个近似...

    何为流计算?

    批计算是已经存在一堆数据,需要用一次计算把这堆数据处理完。
    而流计算是有一个源源不断的源头,是一个为了无止境的数据集设计的计算框架。
    批计算处理的是有界的数据集,而流计算处理的是一个近似无界的数据集。
    批计算更关注的是吞吐量,而流计算更关注的是低延时。

    流计算还有个特性,就是增量性,数据源源不断的流入,对计算结果进行增量的更新,这给状态的容错带来了很大的复杂性(Exactly-Once)。


    Lambda架构

    Lambda架构是由Storm的作者Nathan Marz提出的一个实时大数据处理框架。
    Lambda架构整合离线计算和实时计算,融合不可变性(Immunability),读写分离和复杂性隔离等一系列架构原则。
    Lambda架构分为三层,Speed Layer(对应Storm)、Batch Layer(Hadoop)、查询层(使用KV存储)。
    Speed Layer处理的数据是最近的增量数据流,Batch Layer处理的全体数据集。
    Speed Layer为了效率,接收到新数据时不断更新Realtime View,而Batch Layer根据全体离线数据集直接得到Batch View。
    Lambda架构将数据处理分解为Batch Layer和Speed Layer有如下优点(来自引用1):
    容错性。Speed Layer中处理的数据也不断写入Batch Layer,当Batch Layer中重新计算的数据集包含Speed Layer处理的数据集后,当前的Realtime View就可以丢弃,这也就意味着Speed Layer处理中引入的错误,在Batch Layer重新计算时都可以得到修正。这点也可以看成是CAP理论中的最终一致性(Eventual Consistency)的体现。
    复杂性隔离。Batch Layer处理的是离线数据,可以很好的掌控。Speed Layer采用增量算法处理实时数据,复杂性比Batch Layer要高很多。通过分开Batch Layer和Speed Layer,把复杂性隔离到Speed Layer,可以很好的提高整个系统的鲁棒性和可靠性。


    (图来自DataArtisans Flink PPT)
    聚合/增量:直接使用kv store来进行数据的聚合。
    准确性:算两次,批计算来保证数据的准确。
    批计算:一般24小时算一次。

    Lambda架构的问题是:
    1.大量冗余计算,浪费资源,流计算与批计算重复,批计算每次都跑全量。
    2.由于直接使用KV store来作增量计算,各种瓶颈都在kv store上。

    对此,Flink提出了一个新的思路,就是使用一个高吞吐、有状态的、有存储的、Exactly-Once、可增量计算的流计算引擎来解决这一切(all-streaming),甚至查询直接通过此引擎(目前Flink还没实现)。


    (图来自DataArtisans Flink PPT)
    Time Series Database用于查询已经与当前计算无关的历史值,用户直接查询引擎内部,大大减小了存储开销,也避免了瓶颈。
    没有Lambda架构,也不用设计一套Hadoop的批处理系统,大大减小了开发和运维的工作。


    性能与精确性

    常驻任务

    影响延时最大的就是是否为常驻任务的执行方式,之所以称Spark Streaming为准实时计算,就是因为它的每次计算都需要调度的,它使用了批计算的调度方式,是任务跟着数据走,而Storm/Flink等实时计算,是数据跟着任务走的方式。

    打包

    抛开外部依赖影响,对于吞吐影响最大的还是打包:
    Spark Streaming的做法是直接切成离散流,把流计算转换为批计算。
    Storm1.0的做法是对于其中的队列进行ThreadLocal的打包方式。
    Flink的做法是点到点的打包,结合了内存池的使用,把数据汇聚成固定的segment。
    更进一步的打包是使用列存和压缩。

    序列化

    序列化大概有三种方式:
    Java自带:慢,序列化出来的数据量大。
    Kryo序列化:比Java自带好,通用,可注册,不用管类型。Storm/Spark
    Writable:最快、数据量小,但是反序列化时需要上层的Schema信息,并且需要用户自定义序列化。Flink和SparkSql中,会根据用户的泛型信息生成对应的Writable类,不需要用户手写了。一个良好的Writable实现,可以让序列化反序列化带来的消耗略同于直接的内存拷贝。

    (图来自Flink官网博客)

    如上图Flink测试所示,Writable序列化方式,不管对于数据传输还是聚合都能有效提高整体性能。

    内存池

    流计算中会产生大量的数据在内存中,当打包或发生拥塞时,这些数据躲过了YoungGC,进入了老年代,这会给GC带来很大的压力,而且Full GC也会导致时延不稳定。所以使用内存池,绕过JVM的GC系统或操作系统的内存分配,由于流计算是源源不断产生的,也不用担心碎片问题,Flink。

    Exactly-Once

    Storm中使用了Acker消息追踪的方式保证数据不丢,但是会导致消息量大增,Trident中把数据聚集成批来处理,大大减小了追踪的消息。
    Flink中不追踪消息,只会进行时间间隔的checkpoint,当有出错时,直接全部重来。
    Trident和Flink都是用Master来进行全局统一的分布式checkpoint。
    Trident是checkpoint消息来触发数据的流入计算,而Flink使把checkpoint消息插入正常的数据处理之间。
    Trident使用了两阶段来进行一致性的checkpoint,Flink是靠多版本来在正常的处理流程中进行checkpoint。
    Trident依靠HBase来作增量操作,Flink目前是全量checkpoint。
    Spark Streaming是直接使用了RDD(由于RDD粒度太大,后续也在自建状态的容错)。

    其它

    减少反射和多态(Codegen来解决)、Record粒度减少算随机值和拿系统时间等。



    参考:
    http://developer.51cto.com/art/201511/496529.htm
    https://cwiki.apache.org/confluence/display/FLINK/Stateful+Stream+Processing





    展开全文
  • flink-sql可视化流计算平台

    千次阅读 2020-10-18 17:23:48
    flink-streaming-platform-web系统是基于flink封装的一个web系统,用户只需在web界面进行sql配置就能完成流计算任务, 主要功能包含任务配置、启/停任务、告警、日志等功能。目的是减少开发,完全实现flink-sql ...

    github地址 https://github.com/zhp8341/flink-streaming-platform-web

    建议查看github上的文档

    国内gitee 地址 https://gitee.com/zhuhuipei/flink-streaming-platform-web

    一、简介

    flink-streaming-platform-web系统是基于Apache Flink 封装的一个可视化的、轻量级的flink web客户端系统,用户只需在web
    界面进行sql配置就能完成流计算任务。

    主要功能:包含任务配置、启/停任务、告警、日志等功能,支持sql语法提示,格式化、sql语句校验。

    目的:减少开发、降低成本 完全实现sql化 流计算任务。

    1、主要功能

    • [1] 任务支持单流 、双流、 单流与维表等。
    • [2] 支持本地模式、yarn-per模式、STANDALONE模式。
    • [3] 支持catalog、hive。
    • [4] 支持自定义udf、连接器等,完全兼容官方连接器。
    • [5] 支持sql的在线开发,语法提示,格式化。
    • [6] 支持钉钉告警、自定义回调告警、自动拉起任务。
    • [7] 支持自定义Jar提交任务。
    • [8] 支持多版本flink版本(需要用户编译对应flink版本)。
    • [9] 支持自动、手动savepoint备份,并且从savepoint恢复任务。

    目前flink版本已经升级到1.12

    如果您觉得还不错请在右上角点一下star 谢谢 🙏 大家的支持是开源最大动力

    2、效果及源码文档

    1、 点击查看WEB页面功能显示效果

    2、 源码讲解文档

    二、环境搭建及安装

    1、 Flink 和 flink-streaming-platform-web 安装部署

    三、功能介绍

    3.1 配置操作

    1、sql任务配置

    2、jar任务配置

    3.2 sql配置demo

    1、demo1 单流kafka写入mysqld 参考

    2、demo2 双流kafka写入mysql 参考

    3、demo3 kafka和mysql维表实时关联写入mysql 参考

    4、demo4 滚动窗口

    5、demo5 滑动窗口

    6、demo6 JDBC CDC的使用示例

    7、demo7 datagen简介

    8、catalog 使用示例

    3.2 hello-word demo

    请使用下面的sql进行环境测试 用于新用户跑一个hello word 对平台有个感知的认识

    
      CREATE TABLE source_table (
      f0 INT,
      f1 INT,
      f2 STRING
     ) WITH (
      'connector' = 'datagen',
      'rows-per-second'='5'
     );
      
      
     CREATE TABLE print_table (
      f0 INT,
      f1 INT,
      f2 STRING
     ) WITH (
      'connector' = 'print'
     );
      
      
      insert into print_table select f0,f1,f2 from source_table;
     
    

    官方相关连接器下载

    请移步 https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/table/connectors/

    四、支持flink sql官方语法

    支持的sql语法
    INSERT INTO
    INSERT OVERWRITE
    CREATE TABLE
    CREATE FUNCTION
    CREATE VIEW
    USE CATALOG
    DROP
    ALTER
    SHOW CATALOGS
    SHOW DATABASES
    SHOW TABLES
    SHOW FUNCTIONS
    CREATE CATALOG
    SET
    SELECT (不支持)

    五、其他

    1、由于hadoop集群环境不一样可能导致部署出现困难,整个搭建比较耗时.

    2、由于es 、hbase等版本不一样可能需要下载源码重新选择对应版本 源码地址 https://github.com/zhp8341/flink-streaming-platform-web

    交流和解答

    钉钉 http://img.ccblog.cn/flink/dd2.png

    微信二维码 http://img.ccblog.cn/flink/wx2.png

    完全按照flink1.12的连接器相关的配置详见

    https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/table/connectors/

    如果需要使用到连接器请去官方下载
    如:kafka 连接器 https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/table/connectors/kafka.html

    第一种下载连接器后直接放到 flink/lib/目录下就可以使用了

    1、该方案存在jar冲突可能,特别是连接器多了以后
    2、在非yarn模式下每次新增jar需要重启flink集群服务器
    

    第二种放到http的服务下填写到三方地址

    公司内部建议放到内网的某个http服务
    http://ccblog.cn/jars/flink-connector-jdbc_2.11-1.12.0.jar
    http://ccblog.cn/jars/flink-sql-connector-kafka_2.11-1.12.0.jar
    http://ccblog.cn/jars/flink-streaming-udf.jar
    http://ccblog.cn/jars/mysql-connector-java-5.1.25.jar
    

    图片

    多个url使用换行

    自定义连接器打包的时候需要打成shade 并且解决jar的冲突

    个人建议使用第二种方式,每个任务之间jar独立,如果把所有连接器放到lib 可能会和其他任务的jar冲突
    公用的可以放到flink/lib目录里面 如:mysql驱动 kafka连接器等

    六、问题

    1、 可能遇到的问题和解决方案

    七、RoadMap

    1、 支持除官方以外的连接器 如:阿里云的sls

    2、 任务告警自动拉起 (完成)

    3、 支持Application模式

    4、 完善文档 (持续过程)

    5、 支持sql预校验,编写sql的时候语法提示等友好的用户体验(完成)

    6、 checkpoint支持rocksDB (完成)

    7、 支持jar模式提交任务 (完成)

    八、源码编译

    根据自己的flink版本重新编译web客户端

    九、联系方式

    钉钉
    钉钉二维码

    http://img.ccblog.cn/flink/dd2.png

    微信二维码 http://img.ccblog.cn/flink/wx2.png

    微信二维码

    展开全文
  • 阿里云StreamCompute流计算架构

    千次阅读 2019-06-20 17:48:11
    下图为阿里云流计算全流程系统架构,主要包含:数据采集,流数据,流计算,数据源,数据消费这些过程。 数据采集 用户可以使用流式数据采集工具将数据流式且实时地采集并传输到大数据Pub/Sub系统,该系统将...
  • Flink流计算编程--状态与检查点

    万次阅读 2016-07-21 18:21:53
    Flink 流计算 快照 状态
  • 1.试述流数据的概念 流数据,即数据以大量、快速、时变的流形式持续到达。 2.试述流数据的特点 流数据具有如下特征: 数据快速持续到达,潜在大小也许是无穷无尽的 ...4.试述流计算的需求 对于...
  • Flink在监控流计算中的应用

    万次阅读 2019-01-07 15:29:52
    随着云计算的深入落地,大数据技术有了坚实的底层支撑,不断向前发展并日趋成熟,无论是传统企业还是互联网公司,都不再满足于离线批处理计算,而是更倾向于应用实时流计算,要想在残酷的企业竞...
  • 【数据实时分析】流计算使用教程

    千次阅读 2017-10-20 13:37:47
    课程介绍 阿里云流计算(Alibaba Cloud StreamCompute)是运行在阿里云平台上的流式大数据...课时1:流计算概念 课时2:阿里云流计算产品介绍 课时3:阿里云流计算应用场景 课时4:阿里云流计算新手任务一 课时5:阿
  • Spark流计算(一)

    千次阅读 2017-06-16 09:32:53
    Spark流计算是Spark核心API的扩展,能为数据流提供可扩展的、高吞吐量、容错的流处理。数据可从多个源输入如Kafka,Flume,Kinesis,或TCP接口,能够使用高层函数的复杂算法来处理如map, reduce, join和window。最后...
  • Flink:下一代流计算平台?

    千次阅读 2016-04-11 21:37:37
    Flink是一个基于流计算的分布式引擎,以前的名字叫stratosphere, 从2010年开始在德国一所大学里发起,也是有好几年的历史了,2014年来借鉴了社区其它一些项目的理念,快速发展并且进入了Apache顶级孵化器。...
  • 本文详细介绍了java8 流相关的知识,主要包括流的概念,重点详细阐述了流的基本操作(流计算),包含filter、map、flatMap、sorted、limit、skip、reduce,并通过示例加深理解。
  • 流计算 流数据:数据以大量、快速、时变为主要特点 需要实时的处理 流式数据->点击流数据->实时跟踪分析->迅速给出相关分析 特征:快速,无尽、来源众多、数据量大、注重数据整体价值、数据颠倒不完整等 ...
  • 流计算秉承一个基本理念,即数据的价值随着时间的流逝而 ,如用户点击流。 A.... B....C....D....Hadoop运行的是MapReduce任务,类似地,Storm运行的...对于一个流计算系统来说,它应达到如下哪些需求 A.海量式 B.高性能...
  • 流计算框架对比

    千次阅读 2021-07-15 22:04:41
    前言 本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!...支持原生处理,即单事件来处理数据(所有记录一个接一个处理) ...
  • 流计算 应用场景

    千次阅读 2019-01-10 10:49:35
    Storm处理数据的方式是基于消息的流水线处理, 因此特别适合无状态计算,也就是计算单元的依赖的数据全部在接受的消息中可以找到, 并且最好一个数据不依赖另外一个数据。 因此,常常用于 日志分析,从海量...
  • 流计算框架 Flink 与 Storm 的性能对比

    万次阅读 2017-12-20 22:38:23
    流计算框架 Flink 与 Storm 的性能对比 1. 背景 Apache Flink 和 Apache Storm 是当前业界广泛使用的两个分布式实时计算框架。其中 Apache Storm(以下简称“Storm”)在美团点评实时计算业务中已有较为成熟...
  • 最近也是有很多同学问我spark和flink到底谁好,应该怎么选择,这也是近年来被问的最多的问题,...所以 Volker Markl 教授参考了谷歌的流计算最新论文 MillWheel,决定以流计算为基础,开发一个流批结合的分布式流计算引擎
  • Storm视频教程-Storm流计算之项目实战篇 Storm流计算之项目实战篇(Storm+Kafka+HBase+Highcharts+JQuery,含3个完整实际项目) 课程分类:大数据 适合人群:初级 课时数量:40课时 更新程度:70% 用到技术:...
  • Flink-1.9流计算开发:四、filter函数

    千次阅读 2020-01-08 15:04:17
    Flink-1.9流计算开发:四、filter函数 在本篇文章中我们接着来说filter函数,此函数主要作用就是根据用户条件,过滤数据流中数据。 需求 将数据流的单词做大写转换,并保留其小写,然后只打印出字符串长度大于5的元素...
  • Flink-1.9流计算开发:五、keyBy、sum、print函数 Flink是下一代大数据计算平台,可处理流计算和批量计算。《Flink-1.9流计算开发:五、keyBy、sum、print函数》是cosmozhu写的本系列文章的第五篇。通过简单的DEMO来...
  • 平台简介 在传统的数据处理流程中,总是先...Flink流计算应时而生,它可以对大规模流动数据在不断变化的运转过程中实时的进行分析,加工并把结果发送到下一节点 这里依照阿里流计算平台进行相关知识的分享和探讨 ...
  • ATI 流计算介绍

    千次阅读 2009-12-04 18:03:00
    引言: 随着GPU的并行处理能力的不断提升,GPU的特性被不断的应用于图形无关的应用中,并获得了非常大的速度提升。... 本文介绍了ATI流计算的一些基础知识,对于CAL,Brook+或者OpenCL有兴趣的朋友,可以看看。正文:ATI
  • 本文PPT重点分享网易大数据基于Flink研发的流计算服务化平台Sloth,以SQL为主要开发方式,支持DDL,支持丰富的DML,如Join、Window,支持UDF,提供丰富的Connector,支持任务级联。为网易各业务线提供一站式的流计算...
  • 自由现金流计算方法

    千次阅读 2012-02-01 10:47:02
    贴现现金流法(Discounted Cash Flow)是人们广泛使用的一种企业价值评估方法。...本文对两种不同的自由现金流计算方法进行了比较分析,认为基于现金流量表的方法比基于资产负债表的方法更加合理(以下分别简称为现
  • 关于Spark Streaming优化的各种叽里呱啦记录, 这一次是从跑不动, 一直优化到能每秒解决6万条输入消息以及3G数据的Inner Join. 大数据,流计算,spark,kafka,hadoop
  • Spark streaming&storm流计算的相关对比

    千次阅读 2015-03-22 16:35:50
    spark streaming和Storm作为当今流行的实时流计算框架,已经在实时计算方案应用的非常广泛了,其中spark streaming是基于spark的一个扩展,比storm的出现要晚一些。本章节从以下几个角度对两者进行了阐述,可以作为...
  • 流计算与批量计算的对比

    千次阅读 2018-04-16 14:31:02
    相比于批量大数据计算(式)计算整体上还属于较为新颖的计算概念,下面我们从用户/产品层面来理解下两类计算方式的区别。批量计算目前绝大部分传统数据计算和数据分析服务均是基于批量数据处理模型: 使用ETL系统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 969,152
精华内容 387,660
关键字:

流计算