实时计算Samza中文教程(一)背景

大家应该听我在前言篇里扯皮后,迫不及待要来一看Samza究竟是何物了吧?先了解一下Samza的Background是必不可少的(至少官网上是放在第一个的),我们需要从哪些技术背景去了解呢?

什么是消息(Messaging)?

消息系统是一种实现近实时异步计算的流行方案。消息产生时可以被放入一个消息队列(ActiveMQ,RabbitMQ)、发布-订阅系统(Kestrel,Kafka)或者日志聚合系统(Flume、Scribe)。下游消费者从上述系统读取消息并且处理它们或者基于消息的内容产生进一步的动作。

假设你有一个网站,并且每次有人要加载一个页面,你发送一个“用户看了页面”的事件给一个消息系统。你可能会有一些做下面事情的消费者:

* 为了未来做数据分析,存储消息到hadoop;

* 对页面访问量进行计数并且更新到Dashboard

* 如果页面访问失败触发一个报警;

* 发送一封邮件通知另一个用户;

* 带着这个用户的相关信息加入页面展示事件,并且返回信息给消息系统;

总结一下,很显然,一个消息系统能解耦所有这些来自实际网页服务的工作。

那什么是流式计算(处理)?

大家知道消息系统是一个相当低层次的基础设施(被鄙视了--)——它存储消息等待消费者消费他们。当你开始写产生或者消费消息的代码时,你很快会发现在处理层会有很多恶心的问题需要你亲自处理。而Samza的目标就是帮助我们干掉这些恶心的家伙!

咱们那上面提到的(计算pv并更新到dashboard)例子来说吧,当你的正在跑的消费者机器突然挂掉了,并且你当前的计算的数值丢失了会发生什么?怎么恢复?当机器服务被重启时处理该从哪里开始?如果底层的消息系统重复发送了一条信息或者丢失了一条消息怎么办?或者你想根据url来分组统计pv?又或者一台机器处理的负载太大,你想分流到多台机器上进行统计在聚合?

流式计算为上述问题提供了一个很好的解决方案,它是基于消息系统更高层次的抽象。

Samza

Samza是一个流式计算框架,它有以下特性:

* 简单的API:和绝大多数低层次消息系统API不同,相比MapReduce,Samza提供了一个非常简单的“基于回调(callback-based)”的消息处理API;

*管理状态:samza管理快照和流处理器的状态恢复。当处理器重启,samza恢复其状态一致的快照。samza的建立是为了处理大量的状态;

* 容错性:当集群中有一台机器宕机了,基于Yarn管理的Samza会立即将你的任务导向另一台机器;

* 持久性:Samza通过kafka保证消息按顺序写入对应分区,并且不会丢失消息;

* 扩展性:Samza在每一层都做了分区和分布。kafka提供了顺序的、分区、可复制的、容错的流。Yarn则为Samza的运行提供了一个分布式环境;

*可插拔:虽然Samza在Kafka和YARN的外部工作,但是Samza提供了可以让你在其它消息系统和执行环境里运行的可插拔的API;

*处理器隔离:运行在YARN上的Samza同样支持Hadoop安全模型以及通过linux CGroups进行资源隔离

供选方案:

目前流行的开源流式计算方案都很年轻,并且没有一个单一系统能提供一个全面的解决方案。在这个领域面临的新难题包括如下几个:1.一个流式计算的状态应该怎样管理;2.流是否应该被缓冲到远程机器的磁盘上;3.当重复的信息被接受或者信息丢失该做什么;4.如何建立底层消息传递系统;

Samza的主要区别在于以下几个方面:

* Samza支持局部状态的容错。状态自己作为一个流被构造。如果因为机器宕机本地状态丢失,那么状态流会回放重新存储它。

* 流是有序、分区的、可回放的并且是容错的;

* YARN用来处理隔离、安全和容错;

* 任务之间是解耦的:如果有一个任务慢了并且造成了消息的积压,系统其它部分不会受到影响;

好的,背景就介绍到这里,下一篇咱们一起了解一些概念,方便后续深入学习吧,大家继续加油。

大家应该听我在前言篇里扯皮后,迫不及待要来一看Samza究竟是何物了吧?先了解一下Samza的Background是必不可少的(至少官网上是放在第一个的),我们需要从哪些技术背景去了解呢?

什么是消息(Messaging)?

消息系统是一种实现近实时异步计算的流行方案。消息产生时可以被放入一个消息队列(ActiveMQ,RabbitMQ)、发布-订阅系统(Kestrel,Kafka)或者日志聚合系统(Flume、Scribe)。下游消费者从上述系统读取消息并且处理它们或者基于消息的内容产生进一步的动作。

假设你有一个网站,并且每次有人要加载一个页面,你发送一个“用户看了页面”的事件给一个消息系统。你可能会有一些做下面事情的消费者:

* 为了未来做数据分析,存储消息到hadoop;

* 对页面访问量进行计数并且更新到Dashboard

* 如果页面访问失败触发一个报警;

* 发送一封邮件通知另一个用户;

* 带着这个用户的相关信息加入页面展示事件,并且返回信息给消息系统;

总结一下,很显然,一个消息系统能解耦所有这些来自实际网页服务的工作。

那什么是流式计算(处理)?

大家知道消息系统是一个相当低层次的基础设施(被鄙视了--)——它存储消息等待消费者消费他们。当你开始写产生或者消费消息的代码时,你很快会发现在处理层会有很多恶心的问题需要你亲自处理。而Samza的目标就是帮助我们干掉这些恶心的家伙!

咱们那上面提到的(计算pv并更新到dashboard)例子来说吧,当你的正在跑的消费者机器突然挂掉了,并且你当前的计算的数值丢失了会发生什么?怎么恢复?当机器服务被重启时处理该从哪里开始?如果底层的消息系统重复发送了一条信息或者丢失了一条消息怎么办?或者你想根据url来分组统计pv?又或者一台机器处理的负载太大,你想分流到多台机器上进行统计在聚合?

流式计算为上述问题提供了一个很好的解决方案,它是基于消息系统更高层次的抽象。

Samza

Samza是一个流式计算框架,它有以下特性:

* 简单的API:和绝大多数低层次消息系统API不同,相比MapReduce,Samza提供了一个非常简单的“基于回调(callback-based)”的消息处理API;

*管理状态:samza管理快照和流处理器的状态恢复。当处理器重启,samza恢复其状态一致的快照。samza的建立是为了处理大量的状态;

* 容错性:当集群中有一台机器宕机了,基于Yarn管理的Samza会立即将你的任务导向另一台机器;

* 持久性:Samza通过kafka保证消息按顺序写入对应分区,并且不会丢失消息;

* 扩展性:Samza在每一层都做了分区和分布。kafka提供了顺序的、分区、可复制的、容错的流。Yarn则为Samza的运行提供了一个分布式环境;

*可插拔:虽然Samza在Kafka和YARN的外部工作,但是Samza提供了可以让你在其它消息系统和执行环境里运行的可插拔的API;

*处理器隔离:运行在YARN上的Samza同样支持Hadoop安全模型以及通过linux CGroups进行资源隔离

供选方案:

目前流行的开源流式计算方案都很年轻,并且没有一个单一系统能提供一个全面的解决方案。在这个领域面临的新难题包括如下几个:1.一个流式计算的状态应该怎样管理;2.流是否应该被缓冲到远程机器的磁盘上;3.当重复的信息被接受或者信息丢失该做什么;4.如何建立底层消息传递系统;

Samza的主要区别在于以下几个方面:

* Samza支持局部状态的容错。状态自己作为一个流被构造。如果因为机器宕机本地状态丢失,那么状态流会回放重新存储它。

* 流是有序、分区的、可回放的并且是容错的;

* YARN用来处理隔离、安全和容错;

* 任务之间是解耦的:如果有一个任务慢了并且造成了消息的积压,系统其它部分不会受到影响;

时间: 2024-10-02 00:56:19

实时计算Samza中文教程(一)背景的相关文章

【Samza系列】实时计算Samza中文教程(三)——架构

本篇紧接着概念篇,从宏观角度上看一下Samza实时计算服务的架构是什么样的? Samza是由以下三层构成: 1. 数据流层(A streaming layer) 2. 执行层(An execution layer) 3. 处理层(A progressing layer) 那Samza是依靠哪些技术完成以上三层的组合呢?如下图所示: 1. 数据流:分布式消息中间件Kafka 2. 执行:Hadoop资源调度管理系统YARN 3. 处理: Samza API 玩过大数据Hadoop的人可以类比下面的

实时计算Samza中文教程(二)——概念

希望上一篇背景篇让大家对流式计算有了宏观的认识,本篇根据官网是介绍概念,先让我们看看有哪些东西呢? 概念一:Streams Samza是处理流的.流则是由一系列不可变的一种相似类型的消息组成.举个例子,一个流可能是在一个网站上的所有点击,或者更新到一个特定数据库表的更新操作,或者是被一个服务或者事件数据生成所有日志信息.消息能够被加到另一个流之后或者从一个流中读取.一个流能有多个消费者,并且从一个流中读取不会删除消息(使得小心能够被广播给所有消费者).另外消息可以有一个关联的key用来做分区,这

【Samza系列】实时计算Samza中文教程(四)—API概述

上一篇和大家一起宏观上学习了Samza平台的架构,重点讲了一下数据缓冲层和资源管理层,剩下的一块很重要的SamzaAPI层本节作为重点为大家展开介绍. 当你使用Samza来实现一个数据流处理逻辑时,你必须实现一个叫StreamTask的接口,如下所示: public class MyTaskClass implements StreamTask { public void process(IncomingMessageEnvelope envelope, MessageCollector col

细细品味架构(第1期)_实时计算在点评

Hi,博友: 欢迎查阅<细细品味架构>系列,本系列将和我一起学习,并慢慢走近架构师的神秘世界. 本期目录: 1.本期内容... 3 1.1 版权申明... 3 1.2 内容详情... 3 1.2.1 实时计算在点评的使用场景... 3 1.2.2 实时计算在业界的使用场景... 4 1.2.3 点评如何构建实时计算平台... 5 1.2.4 Storm基础知识简单介绍... 6 1.2.5 如何保证业务运行可靠性... 8 1.2.5 Storm日常使用经验分享... 10 1.2.6 关于计

Swift中文教程(五)--对象和类

原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文里面,否则,方法和函数的写法也是这样: 1 class Shape { 2 var numberOfSides = 0 3 func simpleDescription() -> String { 4 return "A shape with \(numberOfSides) sides.&q

Apple Swift编程语言入门中文教程

Apple Swift编程语言入门教程 目录 1   简介 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简介 今天凌晨Apple刚刚发布了Swift编程语言,本文从其发布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS&OSX开发有所帮助. Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束.S

实时计算平台

实时计算平台中的弹性集群资源管理 本文系微博运维数据平台(DIP)在实时计算平台的研发过程中集群资源管理方面的一些经验总结和运用,主要关注以下几个问题: 异构资源如何整合? 实时计算应用之间的物理资源如何隔离? 集群资源利用率如何提高? 集群运维成本如何降低? 1. 背景 这是我们初期的一个实时计算架构,大致划分为三个部分: (1)日志收集: 使用Rsynlog.Flume.Scribe汇聚各个业务方发送过来的日志数据:如果条件允许,业务方也可以直接将数据写入Kafka. (2)日志传输: 使用

unity3d插件Daikon Forge GUI 中文教程-2-基础控件Label的使用

(游戏蛮牛首发)大家好我是孙广东.官网提供了专业的视频教程http://www.daikonforge.com/dfgui/tutorials/,不过是在youtube上,要观看是需要翻墙的. 不过教程还是文本更好一些,便于观看查找. 我们先来设置 UI Root 中的如下:屏幕大小为1024*768 2.1  新建一个Label 控件 先来看看Control Properties (基本上是所有控件都共用的)的以后不再介绍,参数: 其中要设置好Layout 和 Anchor 我们就要完全的理解

director.js:客户端的路由---简明中文教程

1.引子 最近学用director.js,那是相当的简单易学易使用.不过开始学的时候,搜搜过后,却没有发现相关的中文教程.于是决定硬啃E文,翻译备用的同时也当是给自己上课并加深对它的理解. director.js 的官方地址请点击 这里 查看,本教程内容也主要来自于这里. 2.director.js是什么 director.js 按照我的理解就是客户端的路由注册/解析器,它在不刷新页面的情况下,利用“#”符号组织不同的URL路径,并根据不同的URL路径来匹配不同的回调方法.通俗点说就是什么样的路