此页介绍啊Samza的一些高层级概念。

Streams

Samza处理Streams(流)。流由同一类型的不可变的消息组成。例如,一个流可以是对一个网站的所有点击,或者对一个数据库表的所有更新,或者一个服务产生的所有日志,或者其它类型的消息数据。消息可以被追加到一个流上或者从一个流读出来。一个流可以有任意数量的消费者,并且从一个流读消息并不会把消息从其中删除(所有每息都可以有效地广播到其它消费者)。消息可以有选择地拥有一个相关连的key用做分区partitioning,分区的问题接下来会提到。

Samza支持实现了流这种抽象的pluggable系统:对Kafka,一个流就是一个topic,对于数据库,我们可以消费对一个数据表的更新从而得到一个流,对Hadoop我们可以tail HDFS中的一个目录下的文件。

Jobs

一个Samza job是一些代码,它们用来对一些输入流做逻辑转换,然后把输出的消息追加到一些输出流里。

如果我们不关心可扩展性,我们就只需要streams和jobs。但是,为了扩展流处理器stream processor的吞吐量,我们把streams和jobs切成更小的并行工作的单元:partitions和tasks.

Partitions

每个流被分成一个或更多分区。流中的每个分区都是一个有序的消息序列。

序列中的每条消息都有一个叫做offset的标识,offset在每个partition中是唯一的。offset可以是连续的整数,字节偏移量,或者依赖于底层系统的字符串。

当一个消息被附加到一个流上,它被附加到这个流的一个分区里。从消息到分区的分配由消息生成者提供的一个key来完成。例如,如果用户ID被用来做key,那么就可以使得一个用户相关的所有消息都被送到同一个分区里。

Tasks

一个job通过分成多个task来扩展。task是job并行执行的单元,就像partition是stream的并行单元。每个task消费这个job的一系列输入流中每一个流的一个分区。

一个task从它的每一个输入分区中顺序处理消息,按照message的offset的顺序。在partition之间没有确定的顺序。这使得每个task可以独立操作。YARN调度器把每个task分配到机器,所以每个job做为一个整体被分布到多台机器上。

job里边task的数量由输入的parition的数量决定(不能有比输入的partition更多的task, 否则会有一些task没有输入)。你可以调整分配给一个job的计算资源(内存大小 、 CPU的核数,等)来满足job的需要。详见下边对container的描述。

task和partition之间的分配永远不会改变:如果某个机器上的task失败了,这个task会在别的地方重启,它还会继续消费同样的流的分区。

Dataflow Graphs

我们可以把多个job组在一起来创建一个dataflow graph。这个数据流图中,节点是包含了数据的stream,边是进行转换的jobs。这种组合完全通过job的输入输出流来实现。这些job的其它方面是完全解耦合的:它们不需要由同样的代码基础实现,并且对下游job的增加、移除、重启都不会影响上游的job。

这些graph通常都是无环的——数据通常不是从一个job出来,经过其它的job,回到它自己。但是,如果你需要,也可以创建有环图。

Containers

partition和task都是并行的逻辑单元,它们并不和任何对计算资源(CPU、内存、磁盘空间等)的特定分配有关。Container是物理并行的单元,一个container本质上是一个Unix进程(或Linux cgroup)。每个container运行一个或多个tasks。task的数目由输入的partition 的数目自动决定,并且是固定的。但是container的数量(以及与其相关联的CPU和存储资源)由用户在运行时指定的,并且任何时候都可以改变。

下一节 Architecture

Samza文档翻译 : Concepts的更多相关文章

  1. Samza文档翻译 : Comparison Introduction

    http://samza.incubator.apache.org/learn/documentation/0.7.0/comparisons/introduction.html 这里有一些使得Sam ...

  2. Samza文档翻译 : Architecture

    http://samza.incubator.apache.org/learn/documentation/0.7.0/introduction/architecture.html Samza由三层组 ...

  3. Samza文档翻译 : Backgroud

    这一页提供了关于流处理的背景知识,描述什么是Samza,以及它为何而生. what is messaging?什么叫消息? 消息系统是用来实现近实时异步计算的一种流行方式.当事件发生时,消息可以被放在 ...

  4. Flink官网文档翻译

    http://ifeve.com/flink-quick-start/ http://vinoyang.com/2016/05/02/flink-concepts/ http://wuchong.me ...

  5. Apache Samza - Reliable Stream Processing atop Apache Kafka and Hadoop YARN

    http://engineering.linkedin.com/data-streams/apache-samza-linkedins-real-time-stream-processing-fram ...

  6. 我是如何进行Spring MVC文档翻译项目的环境搭建、项目管理及自动化构建工作的

    感兴趣的同学可以关注这个翻译项目 . 我的博客原文 和 我的Github 前段时间翻译的Spring MVC官方文档完成了第一稿,相关的文章和仓库可以点击以下链接.这篇文章,主要是总结一下这个翻译项目 ...

  7. 新书到手 TRANSACTION PROCESSING:CONCEPTS AND TECHNIQUES

    新书到手 TRANSACTION PROCESSING:CONCEPTS AND TECHNIQUES Jim Gray大神的著作 本文版权归作者所有,未经作者同意不得转载.

  8. Hibernate 3.3.2 文档翻译 Day01

    Hibernate 3.3.2 文档翻译 翻译人:微冷的雨 第一次书写:2015年11月29日 本人呕心沥血之作,请细心阅读领悟! Day01-1.1 项目描述 微冷的雨翻译:例如,我们将要建立一个可 ...

  9. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Flume官方文档翻译--Flume 1.7.0 User Guide (unr ...

随机推荐

  1. 【转】Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline

    相信大家对LinearLayout已经相当熟悉,但你们是否了解它的属性baselineAligned呢? Android官方文档是这么描述的:

  2. 关于MySql entity framework 6 执行like查询问题解决方案

    原文:关于MySql entity framework 6 执行like查询问题解决方案 本人不善于言辞,直接开门见山 环境:EF6.0.0.0+MySQL Server5.6+MySqlConnec ...

  3. C# 线程--第三线程池

    概述 线程池有那些优点: 1.在多线程中线程池可以减少我们创建线程,并合理的复用线程池中的线程.因为在线程池中有线程的线程处于等待分配任务状态. 2.不必管理和维护生存周期短暂的线程,不用在创建时为其 ...

  4. 逻辑推理:在一个100条语句的列表中,第n条语句是“在这个列表中,恰有n条语句为假”,可以得出什么结论?

    <离散数学及其应用>第六版1.1练习题第43题的个人分析 题目:在一个100条语句的列表中,第n条语句是"在这个列表中,恰有n条语句为假"..........      ...

  5. Mysql数据表的操作

    表的操作 前提:选择数据库 语法: use 数据库名; 1.创建数据表 语法: create table 表名( 字段1 字段类型 [附加属性], 字段2 字段类型 [附加属性], 字段3 字段类型 ...

  6. pickle模块的基本使用

    pickle是python的biult-in模块: python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储 ...

  7. ATL一:CWindowImpl

    1,#ifdef _ATL_DISABLE_NO_VTABLE#define ATL_NO_VTABLE#else#define ATL_NO_VTABLE __declspec(novtable)# ...

  8. 利用TCP 客户端---->服务端 传送文件到指定路径,并返回一个友好的回馈

    首先盲写的一个传输文件的方法,但测试发现了一个非常不容易发现的问题,这里先说明一下. 错误的代码如下: package com.TCP.java; import java.io.File; impor ...

  9. winfrom LED时钟

    public sealed class Clock : PictureBox { public Clock() { SetStyle(ControlStyles.AllPaintingInWmPain ...

  10. 四个基数任意次数组合相加得到一个数N,求所有可能组合

    #include <iostream> #include <vector> usingnamespace std; vector<int> vec; constin ...