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

    概念一: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. Working with Numbers in PL/SQL(在PL/SQL中使用数字)

    This article gives you all the information you need in order to begin working with numbers in your P ...

  2. 解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题

    我们使用Spring中的JdbcDaoSupport往Mysql中插入数据并返回主键代码,我们使用的mysql数据库,主键在数据库中设置为自增长:该类继承自JdbcDaoSupport,所以能直接使用 ...

  3. 在Qt中用QAxObject来操作Excel

        目录(?)[+]   下一篇:用dumpcpp工具生成的excel.h/excel.cpp来操纵Excel 最近写程序中需要将数据输出保存到Excel文件中.翻看<C++ GUI Pro ...

  4. .net中用到的一些方法

    //文件操作string fullDirPath = Utils.GetMapPath(string.Format("/aspx/{0}/", buildPath)); Direc ...

  5. MySql命令——命令行客户机的分隔符

    delimiter // create procedure productpricint() begin select avg(price) as priceaverage from product; ...

  6. android 注释常用标签

    javadoc: {@link ActivityGroup}   链接到包.类: {@link #setContentView} 用#链接到类成员: @return View The current ...

  7. 上传图片预览,支持IE6

    //说明:图片上传预览插件 //上传的时候可以生成固定宽高范围内的等比例缩放图 //参数设置: //width 存放图片固定大小容器的宽 //height 存放图片固定大小容器的高 //imgDiv ...

  8. perl6之'Hello World'

    安装完perl6之后,当然是要写一下Hello World了. 因为perl6的脚本一般都很短小,所以用不着很笨重的IDE之类的东西,我们用VIM,sublime text这种小型的编辑器 来开始pe ...

  9. 从Go、Swift出发:语言的选择需谨慎

    本文转自 : http://www.csdn.net/article/2014-12-09/2823025 摘要:无论是开源的Go,还是闭源的Swift,新的语言总是利弊一体.不过可以确定的是,新的语 ...

  10. JDK,TomCat安装配置

    JDK.Tomcat.myEclipse安装配置 准备安装包 JAVA运行环境包 JDK1.7下载地址: http://www.veryhuo.com/down/html/43205.html Jsp ...