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

    概念一: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. LDA-线性判别分析(三)

    本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...

  2. 设计模式之八:外观模式(Facade)

    外观模式: 为子系统中的一系列接口提供了一个统一的界面.外观模式定义了一个高层次的接口以使子系统更加easy使用. Provide a unified interface to a set of in ...

  3. IOS总结_无需自己定义UITabbar也可改变UITabbarController的背景和点击和的颜色

    在application: application didFinishLaunchingWithOptions: launchOptions 增加以下代码就能够实现对tabbar的颜色的改动 //设定 ...

  4. 使用INTERVAL YEAR TO MONTH类型

    Oracle Database 9i数据库引入了一种新特性,可以用来存储时间间隔.时间间隔的例子包括: ● 1年零3个月 ● 25个月 ● -3天5小时16分 ● 1天7小时 ● -56小时 注意: ...

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

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

  6. HTML - EMail链接

    HTML - EMail链接 HTML Email 标签 在标签中,提供一个email地址,你就可以让用户发送邮件,格式是: <a href= "mailto:jack@kingyar ...

  7. Android 定义重名权限问题

    一直以来对android的权限机制就有一个疑问,因为在使用权限时,实际上只需要permission的name这一个标签,而在定义权限时,android是不会检查是否重名的,那么在两个应用定义了重名权限 ...

  8. oracle 语句汇总

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1 ...

  9. 类似QQ侧滑菜单功能实现

    之前的那文章简单实现了菜单侧拉功能,但是做不到像QQ那样导航条和tabBar一起移动...之后在网上找资料,有了思路,就自个写了个demo试试水. 先创建QHLMainController控制器,并把 ...

  10. 网络编程之UDP

    UDP编程流程:一服务端:1.创建socket.  DatagramSocket socket = new DatagramSocket(8878); 2.创建数据包,用来接收发送的数据包.byte[ ...