这一页提供了关于流处理的背景知识,描述什么是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 NDK 开发步骤

    NDK开发一般分为一下几个步骤:(默认你已经安装好了NDK和android开发环境) 1.创建一个项目 2.创建JNI目录 3.编写nativejava层方法 4.生成JNI头文件 (1)编写java ...

  2. 北大ACM(POJ1753-Flip Game)

    Question:http://poj.org/problem?id=1753 问题点:穷举. #include <iostream> using namespace std; ][];/ ...

  3. Memcached学习(一)

    1.Memcached是什么? 引用维基百科上得简介,Memcached 是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,目前已被诸如Facebook等许多 ...

  4. Cocos2d-x开发实例:使用Lambda 表达式

    在Cocos2d-x 3.0之后提供了对C++11标准[1]的支持,其中的Lambda[2]表达式使用起来非常简洁.我们可以使用Lambda表达式重构上一节的实例. 我们可以将下面的代码: liste ...

  5. [Bootstrap]全局样式(五)

    辅助样式 1.情景文本色  .text-muted  .text-primary  .text-success  .text-info  .text-warning  .text-danger  {c ...

  6. 利用js来实现一些常用的算法

    示例代码中的arr指的是给出的数组,s指的是数组的起始坐标0,end指的是数组的最后一个坐标arr.length-1,n指的是要查找的数字 查找某个值: 1.线性法 function findInAr ...

  7. js 书写规范

    1.字符串用单引号 2.运算符号和变量之间用空格建立间距 3.书写插件时使用 'use strict'; 开头 4.方法如果是获取或者设置数据集合则使用动词如  getData,setData,eac ...

  8. jquery-ui 中treegird 逐步加载

    官方网站上没有ajax逐步加载的例子,自己研究了下 js代码 $("#bomStructureTable").treegrid({ url : "systemcontro ...

  9. Alluxio1.0.1最新版(Tachyon为其前身)介绍,+HDFS分布式环境搭建

    Alluxio(之前名为Tachyon)是世界上第一个以内存为中心的虚拟的分布式存储系统.它统一了数据访问的方式,为上层计算框架和底层存储系统构建了桥梁. 应用只需要连接Alluxio即可访问存储在底 ...

  10. DB2 connection

    1.DB2 connection-----DB2连接方式 2.开放应用层----type way 4 ==共享 3.本地本地之间访问----type way 2 JDBC SD---sysplex d ...