Samza文档翻译 : Concepts
此页介绍啊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的更多相关文章
- Samza文档翻译 : Comparison Introduction
http://samza.incubator.apache.org/learn/documentation/0.7.0/comparisons/introduction.html 这里有一些使得Sam ...
- Samza文档翻译 : Architecture
http://samza.incubator.apache.org/learn/documentation/0.7.0/introduction/architecture.html Samza由三层组 ...
- Samza文档翻译 : Backgroud
这一页提供了关于流处理的背景知识,描述什么是Samza,以及它为何而生. what is messaging?什么叫消息? 消息系统是用来实现近实时异步计算的一种流行方式.当事件发生时,消息可以被放在 ...
- Flink官网文档翻译
http://ifeve.com/flink-quick-start/ http://vinoyang.com/2016/05/02/flink-concepts/ http://wuchong.me ...
- 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 ...
- 我是如何进行Spring MVC文档翻译项目的环境搭建、项目管理及自动化构建工作的
感兴趣的同学可以关注这个翻译项目 . 我的博客原文 和 我的Github 前段时间翻译的Spring MVC官方文档完成了第一稿,相关的文章和仓库可以点击以下链接.这篇文章,主要是总结一下这个翻译项目 ...
- 新书到手 TRANSACTION PROCESSING:CONCEPTS AND TECHNIQUES
新书到手 TRANSACTION PROCESSING:CONCEPTS AND TECHNIQUES Jim Gray大神的著作 本文版权归作者所有,未经作者同意不得转载.
- Hibernate 3.3.2 文档翻译 Day01
Hibernate 3.3.2 文档翻译 翻译人:微冷的雨 第一次书写:2015年11月29日 本人呕心沥血之作,请细心阅读领悟! Day01-1.1 项目描述 微冷的雨翻译:例如,我们将要建立一个可 ...
- 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 ...
随机推荐
- AIDL进程间调用与Binder的简单介绍
Binder是安卓中特有的一种进程间通信(IPC)方式,从Unix发展而来的手段,通信双方必须处理线程同步.内存管理等复杂问题,传统的Socket.匿名通道(Pipe).匿名管道(FIFO).信号量( ...
- Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector
那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...
- autolayout高度动态改变的一些体会
autolayout这个东西就不在此说明了,网上已经有很多大神做了很详细的讲解,自己也看了不少好文章,在这里只是想记录一下自己初步的一些认识与体会,这个东西毕竟还是很强大,如果要用到更高级的用法还得在 ...
- Android应用资源--之属性(Attribute)资源
原文链接: http://wujiandong.iteye.com/blog/1184921 属性(Attribute)资源:属于整个Android应用资源的一部分.其实就是网上一堆介绍怎么给自定义V ...
- 我对c++对象内存布局的理解
引言 结合网上的一些资料,通过自己的一番摸索,得出了一点个人见解.现在写下来,希望与各位同学共同探讨,共同进步. 以下所有代码均是在VS2012下测试. 一个普通的基类 1: #include < ...
- Poj 3062 Celebrity jeopardy
1.Link: http://poj.org/problem?id=3062 2.Content: Celebrity jeopardy Time Limit: 1000MS Memory Lim ...
- linux命令之vim使用-(转)vim的保存文件和退出命令
博客地址: http://blog.sina.com.cn/s/blog_5e357d2d0100zmth.html
- 第七章 探秘Qt的核心机制-信号与槽
第七章 探秘Qt的核心机制-信号与槽 注:要想使用Qt的核心机制信号与槽,就必须在类的私有数据区声明Q_OBJECT宏,然后会有moc编译器负责读取这个宏进行代码转化,从而使Qt这个特有的机制得到使用 ...
- JSON Helper
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Se ...
- iOS Mac系统下Ruby环境安装
由EasyIOS引出的一系列问题:转载的上一篇CocoaPods安装和使用教程中说明了,为什么要使用cocoapods ,但是要安装cocoapods需要Ruby环境,安装Ruby环境首先需要安装Xc ...