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

    概念一: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. java与.net比较学习系列(7) 属性

    文章摘自:http://www.cnblogs.com/mcgrady/p/3411405.html 说起属性,实际上java中没有属性这个概念,只有字段和方法,但是可以通过私有字段和声明get,se ...

  2. UISwitch + UIimage - 初识IOS

    这里解释一个小例子,希望对你有点帮助,利用UISwitch控制UIimage的动画效果 先定义一个数组,用来存放照片,现在定义数组有一个特别简单的方法: NSArray *image1 = @[]; ...

  3. Centos 7 python升级(2.7.5-》2.7.11)

    1.安装升级GCC yum install gcc* openssl openssl-devel ncurses-devel.x86_64  bzip2-devel sqlite-devel pyth ...

  4. CSS的优先级

    样式的优先级: (内联样式表[嵌入式样式])>(内部样式表)>(外部样式表) 经过测试动手测试发现有个(唯一的)例外 情况:当引用外部样式在内部样式表(非嵌入式样式)的后面时,外部样式会覆 ...

  5. Biztalk2010安装及配置问题集

    在安装Biztalk2010时,碰到很多问题,有的是粗心有的也是比较bt的,如: 1)在win7 64下引入x86 的cab,有点粗心,幸亏给我报错版本不兼容(呵呵): 2)安装的时候 不知道为什么计 ...

  6. jquery easyui datagrid 分页 详解

    前些天用jquery easyui的table easyui-datagrid做分页显示的时候,折腾了很久,后来终于解决了.其实不难,最主要我不是很熟悉前端的东西. table easyui-data ...

  7. python 技巧 之 pyCharm快速添加第三方库和插件

    学习python有几个月,安装第三方库都是通过 pip install 或者 easy_install.每次都要打开命令行感觉太麻烦.还好Pycharm提供了安装第三方库和安装插件的功能. 首先打开P ...

  8. Emacs入门快捷键

    打开emacs开始一个程序最基本操作: 1.打开Emacs,执行 $ emacs 2.建立一个新的程序文件. 按C-x C-f 然后在屏幕的底部出现minibuffer,光标提示你输入文件名称, 文件 ...

  9. linux学习方法之一

    相信不少想学习linux的新手们正愁不知道看什么linux学习教程好,下面小编给大家收集和整理了几点比较重要的教程,供大家学习,如需想学习更多的话,可到wdlinux学堂寻找更多教程. 1.什么是RP ...

  10. 实现js浮点数加、减、乘、除的精确计算(网上很多文章里的方法是不能解决所有js浮点数计算误差的)

    最近做项目,要用到js的加.减.乘.除的计算,发现js浮点数计算会有一些误差. 网上有很多文章都有js浮点数计算误差的解决方法,说能解决这个问题,But…….比如一个加法函数,如下: function ...