希望上一篇背景篇让大家对流式计算有了宏观的认识,本篇依据官网是介绍概念,先让我们看看有哪些东西呢?

    概念一:Streams
    Samza是处理流的。流则是由一系列不可变的一种相似类型的消息组成。举个样例,一个流可能是在一个站点上的全部点击,或者更新到一个特定数据库表的更新操作,或者是被一个服务或者事件数据生成全部日志信息。消息可以被加到还有一个流之后或者从一个流中读取。一个流能有多个消费者,而且从一个流中读取不会删除消息(使得小心可以被广播给全部消费者)。另外消息可以有一个关联的key用来做分区,这个将在后面说明。

    Samza支持实现流抽取的可插拔系统:在kafka里,流是一个topic(话题),在数据库里我们能够通过消费从一个表里更新操作读取一个流;而在hadoop里我们可能跟踪在hdfs上的一个文件夹下的文件。

    概念二:Jobs
    Samza的jobs 是对一组输入流设置附加值转化成输出流的程序(见下图)。为了扩展流处理器的吞吐量,我们将任务拆分更小的并行单元:分区Partitions和任务tasks
                                                                               
 
    概念三:Partitions
    每个流都被切割成一个或多个分区,而且在流里的每个分区都总是一个有序的消息序列。每个消息在这个序列里有一个被叫做offset(中文暂且称它为偏移量吧),它在每个分区里都是唯一的。这个偏移量能够是一个连续的整数、字节偏移量或者字符串,这取决于底层的系统实现了。
    当有一个消息增加到流中,它仅仅会追加到流的分区中的一个。这个消息通过写入者带着一个被选择的key分配到它相应的分区中。举个样例,假设用户id被用作key,那么全部和用户id相关的消息都应该追加到这个分区中。
           
                                                    
    概念四:Tasks
    一个job通过把他切割成多个任务Task进行扩展。任务作为job的并行单元,就好比上述提到的流中的分区。每一个任务为每一个job输入流消费来自一个分区的数据。
    依照消息的偏移,一个任务按序处理来自它的输入分区的消息。分区之间未定义顺序,这就同意每个任务独立运行。YARN调度器负责分发任务给一台机器,所以作为一个总体的工作job能够分配到多个机器并行运行。
    在一个job中任务的数量是由输入分区决定的(也就是说任务数目不能超过分区数目,否则就会存在没有输入的任务)。但是,你能改变分配给job的计算资源(比方内存、cpu核数等)去满足job的须要,能够參考以下关于container的介绍。
    另外一个值得注意的是分配给task的分区的任务绝不会改变:假设有一个任务在一台失效的机器上,这个task会被在其他地方重新启动,仍然会消费同一个流的分区。
                                                                      
 
    概念五:Dataflow Graphs
    我们能组合多个jobs去创建一个数据流图,当中节点表示包括数据的流,而边则是进行传输数据。这个组合纯粹是通过jobs作为输入和输出的流来完毕。这些jobs也是解耦的:他们不须要基于同样的代码库,而且加入、删除或者重新启动一个下游任务不会影响上游的任务。
                                               
                                                    
 
    概念六: Containers
    分区Partitions和任务tasks都是并行的逻辑单元——他们不会与特定的计算资源(cpu、内存、硬盘等)的分配相符合。Containers则是物理的并行单元,而且一个容器本质上是一个Unix进程。每一个容器跑着一个或多个tasks。tasks的数量是从输入的分区数自己主动确定和固定下来的,可是容器的数量(cpu、内存资源)是在执行时用户设定的而且能在不论什么时刻改变。

    好了Samza的几个大的概念介绍完了,我们能够从宏观上看看Samza是什么样的,下一篇内容咱们来赞赏一下它的架构。

【Samza系列】实时计算Samza中文教程(二)——概念的更多相关文章

  1. Swift中文教程(二)--简单值

    原文:Swift中文教程(二)--简单值 Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: var myVariable ...

  2. 【Samza系列】实时计算Samza中文教程(四)—API概述

    上一篇和大家一起宏观上学习了Samza平台的架构,重点讲了一下数据缓冲层和资源管理层.剩下的一块非常重要的SamzaAPI层本节作为重点为大家展开介绍.     当你使用Samza来实现一个数据流处理 ...

  3. Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建

    前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...

  4. 【Samza系列】实时计算Samza中文教程(一)背景

        大家应该听我在前言篇里扯皮后,迫不及待要来一看Samza到底是何物了吧?先了解一下Samza的Background是不可缺少的(至少官网上是放在第一个的),我们须要从哪些技术背景去了解呢?   ...

  5. TOP100summit:【分享实录】Twitter 新一代实时计算平台Heron

    本篇文章内容来自2016年TOP100summit Twitter technical lead for Heron Maosong Fu 的案例分享. 编辑:Cynthia Maosong Fu:T ...

  6. struts2官方 中文教程 系列十二:控制标签

    介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...

  7. Netty4.x中文教程系列(二) Hello World !

    在中国程序界.我们都是学着Hello World !慢慢成长起来的.逐渐从一无所知到熟悉精通的. 第二章就从Hello World 开始讲述Netty的中文教程. 首先创建一个Java项目.引入一个N ...

  8. Netty4.x中文教程系列(二) Hello World !<转>

    在中国程序界.我们都是学着Hello World !慢慢成长起来的.逐渐从一无所知到熟悉精通的. 第二章就从Hello World 开始讲述Netty的中文教程. 首先创建一个Java项目.引入一个N ...

  9. Netty4.x中文教程系列(五)编解码器Codec

    Netty4.x中文教程系列(五)编解码器Codec 上一篇文章详细解释了ChannelHandler的相关构架设计,版本和设计逻辑变更等等. 这篇文章主要在于讲述Handler里面的Codec,也就 ...

随机推荐

  1. [think in java]知识点学习

    java中 全部数值都有正负号,不存在无符号整数. java中的基本类型存储在堆栈中. 其它对象存储在堆中. java确保数组会被初始化,并且不能在它的范围之外被訪问. 下面代码在c和c++中是合法的 ...

  2. 程序猿都是project师吗?

    全部的程序猿都是project师吗?当然不是.project师是必修课.程序猿则是选修.project师为自己的事业工作,而程序猿做他们喜欢做的事情.project是实实在在的,编程是抽象的. 为了吸 ...

  3. UIButton-初识IOS

    今天,我学到了所有app经常用到的UIButton控件,废话不多说,这些都是我学习的时候总结的一些,希望可以帮到以后的初学者,IOS初学不应该直接拖拽,感觉不易于理解,所以我总结的基本上全是纯代码编辑 ...

  4. CSS彻底研究(3) - 浮动,定位

    Github pages 博文 CSS彻底研究(3)-浮动,定位 一 . 浮动float I . 定义及规则 float默认为none,对应标准流的情况.当float : left;时,元素就会向其父 ...

  5. ASP.NET的Application简介1

    ASP.NET中的Application 1. Application是用于保存所有用户共有的信息.在ASP时代,如果要保存的数据在应用程序生存期内不会或者很少改变,那么使用Application是理 ...

  6. c中关于#与##的简易使用

    #运算符用于在预编译时,将宏参数转换为字符串 eg. #include <stdio.h>#define CONVERT(f)(#f) void helloworld(){ printf( ...

  7. request.getParamer()

    eturns the value of a request parameter as a String, or null if the parameter does not exist. Reques ...

  8. wordpress教程之get_option()

    get_option函数的作用 如果你想开发自己的一个wordpress插件,那么也许你有些数据希望保存,这些自定义数据一起都保存在 wordpress数据库的wp_options表,wp_optio ...

  9. 玩sdr的朋友们,在rtl_tcp时,记得调整rtl_AGC和tuner_AGC啊

    我在rtl_tcp时没有调整这个,结果怎么也听不到声音啊 还有就是在搞rtl_tcp时,一定要网速跟得上,我用无线网络时就碰到了这个问题,声音总是一直断续着,郁闷死

  10. Android中动态更新TextView上的文字

    示例代码: 1.新线程,定时更新文字 class testThread extends Thread{ public void run() { Message message = new Messag ...