这一页提供了关于流处理的背景知识,描述什么是Samza,以及它为何而生。

what is messaging?什么叫消息?

消息系统是用来实现近实时异步计算的一种流行方式。当事件发生时,消息可以被放在消息队列里(ActiveMQ, RabbitMQ),发布-订阅系统(Kestrel, Kafka)里,或者日志汇集系统(Flume,Scribe)里。下游的消费者从这些系统里读消息,进行处理,或者根据消息内容采取行动。
 
假如你有一个网站,并且每次有人加载一个网页,就发送发一个"用户查看了页面"的消息到消息系统。你可能会有做以下任意事情的consumer:
  • 把消息存储到Hadoop,用来以后分析
  • 计算页面访问量并且更新到dashboard
  • 如果页面访问失败,触发一个警报Background
  • 发送一个电子邮件通知另一个用户
  • 把页面访问事件和用户的档案合在一起,把合并后的消息发回给消息系统
一个消息系统使你将以上的工作和实际的网页服务解耦合。
 

What is stream processing?  什么叫流处理

 
一个消息系统是相当低层级一部分基础设施——它存储消息,等待consumers来消费它。当你开始写代码来生产或消费消息,你很快就会发现在处理层有很多难对付的问题。Samza的目标就是帮助解决这些问题。
 
用上面的网页访问计数的例子(计算访问量,然后更新dashboard)来说。你的消费者运行在的机器出现故障,并且你当前的计数器的值丢失了,将会发生什么?你怎么来恢复?当处理程序重启时,它应该在哪运行?如果底层的消息系统发送给你两次同样的消息,或者丢失一个消息,应该怎么办?(除非你很小心,否则你的计数器可能就不正确了)。如果单独一台机器没有足够的计算能力,你怎么把计算分布到多台机器上。
 
流处理是消息系统之上的更高级别的抽象,它就是用来精确地解决这一类问题。
 

Samza

 
samza是一个流处理框架,它有以下特性:
  • 简单的API:不像大多数低层级的消息系统的API,Samza提供了一个非常简单的,基于回调的 “消息处理”  API,和MapReduce类似。
  • 受控的状态:Samza管理“流处理器”的快照和恢复。当一个流处理器重启,Samza会恢复它的状态到一个一致的快照。Samza被构建来处理大规模的状态(每个分区数GB).
  • 容错:当集群中的任何一个机器发生故障,Samza和YARN一起透明地迁移你的task到另一台机器。
  • Durability持久性: Samza使用Kafka来保证消息按照他们写入一个partition的顺序被处理,并且不会有消息丢失。
  • Scalability可扩展:Samza在各个层面上都是分区的以及分布式的。Kafka提供了有序的、分区的、可回放的、容错的消息流。YARN提供给Samza容器一个分布式的环境来运行。
  • Pluggable可插拔的:虽然Samza自带对Kafka和YARN的支持,但是Samza同时提供了可插拔的API来让你在别的消息系统和运行环境中运行Samza。
  • Processor isolation处理器隔离:Samza与Apache YARN一起工作。YARN提供了Hadoop的安全模型,以及利用Linux CGruops的资源隔离。

其它选择

 
现在可用的开源流处理系统都实际上非常新,没有一个单独的系统提供了所有的解决方案。这个领域的新问题包括:怎么管理流处理器的状态?是否一个流应该被远程缓存在硬盘上?当重复的消息被接收或者消息丢失时应该怎么做?怎么对底层的消息系统建模?
 
Samza的主要区分点在于:
  • Samza支持本地状态的容错。状态可以被想象成一些表,它们被分成很多块,和各个处理工作分布到一起。状态本身被建模成一个流。如果本地状态由于机器故障丢失,状态流就会被回放,以重建它。
  • 流是有序的、分区的、可以回放的、容错的
  • YARN被用来做处理器隔离、安全、以及容错
  • 任务之间是解耦合的:如果一个job很慢,积压了一些未处理的消息,其它的系统不会受影响。
如果想要一个对Smaza更深层的讨论,以及它和其它的流处理系统的关系,看一下Samza的Comparision文档吧。

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

  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文档翻译 : Concepts

    此页介绍啊Samza的一些高层级概念. Streams Samza处理Streams(流).流由同一类型的不可变的消息组成.例如,一个流可以是对一个网站的所有点击,或者对一个数据库表的所有更新,或者一 ...

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

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

  5. Hibernate 3.3.2 文档翻译 Day01

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

  6. 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 ...

  7. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)(二)

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Logging raw data(记录原始数据) Logging the raw ...

  8. 流式大数据处理的三种框架:Storm,Spark和Samza

    许多分布式计算系统都可以实时或接近实时地处理大数据流.本文将对三种Apache框架分别进行简单介绍,然后尝试快速.高度概述其异同. Apache Storm 在Storm中,先要设计一个用于实时计算的 ...

  9. SQLAlchemy 中文文档翻译计划

    SQLAlchemy 中文文档翻译计划已启动. Python 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质.交流群:467338606. 希望大家能够勇敢地去翻译和改进翻译.虽然我 ...

随机推荐

  1. Android Support v4,v7,v13

    Android Support v4 是最早(2011年4月份)实现的库.用在Android1.6 (API lever 4)或者更高版本之上.它包含了相对V4, V13大的多的功能. 例如:Frag ...

  2. .NET微信支付(H5仅限公众号支付)

    闲来无事,恰好有一个要用微信公众平台支付的功能,研究来研究去,就是要细心和多看腾讯提供的文档.当然有几个坑是很有必要说明一下的 公众号支付,这里统一叫H5支付,以下都是. 在做H5支付的时候,第一步就 ...

  3. select into 、 insert into select 、create table as select复制表

    Insert是T-sql中常用语句,Insert INTO table(field1,field2,...)  values(value1,value2,...)这种形式的在应用程序开发中必不可少.但 ...

  4. 第二十九篇、CoreAnimation的使用

    使用的的三个步骤 1.初始化演员 2.设置好剧情 3.播放 主要类: CALayer // 绘图部分 CABaseAnimation // 基本动画(缩放,移动) CAKeyframeAnimatio ...

  5. Cocos2d-x实例:单点触摸事件

    addChild(boxC,30, kBoxC_Tag);                                                                        ...

  6. 在swift中使用MJRefresh

    cocoapod导入的,并且桥接已经完成,但是就是不提示方法,醉了,

  7. 【译】 Node.js v0.12的新特性 -- Cluster模式采用Round-Robin负载均衡

    原文:https://strongloop.com/strongblog/whats-new-in-node-js-v0-12-cluster-round-robin-load-balancing 本 ...

  8. C++与Lua交互(一)

    引言 之前做手游项目时,客户端用lua做脚本,基本所有游戏逻辑都用它完成,玩起来有点不爽,感觉"太重"了.而我又比较偏服务端这边(仅有C++),所以热情不高.最近,加入了一个端游项 ...

  9. MVC 点击下载文档

    动态生成的List,view页面: <a href=\"#\" class=\"onlyedu-btn\" id=\"downloadError ...

  10. 用PHP生成随机数的函数

    转自:http://www.jbxue.com/article/5034.html 介绍:在早期的php中生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生 ...