大家应该听我在前言篇里扯皮后,迫不及待要来一看Samza到底是何物了吧?先了解一下Samza的Background是不可缺少的(至少官网上是放在第一个的),我们须要从哪些技术背景去了解呢?
    什么是消息(Messaging)?
    消息系统是一种实现近实时异步计算的流行方案。

消息产生时能够被放入一个消息队列(ActiveMQ,RabbitMQ)、公布-订阅系统(Kestrel,Kafka)或者日志聚合系统(Flume、Scribe)。下游消费者从上述系统读取消息而且处理它们或者基于消息的内容产生进一步的动作。

    如果你有一个站点,而且每次有人要载入一个页面,你发送一个“用户看了页面”的事件给一个消息系统。你可能会有一些做以下事情的消费者:
    * 为了未来做数据分析,存储消息到hadoop。
    * 对页面訪问量进行计数而且更新到Dashboard
    * 假设页面訪问失败触发一个报警。
    * 发送一封邮件通知还有一个用户;
    * 带着这个用户的相关信息增加页面展示事件,而且返回信息给消息系统;
    总结一下。非常显然。一个消息系统能解耦全部这些来自实际网页服务的工作。

    那什么是流式计算(处理)?
    大家知道消息系统是一个相当低层次的基础设施(被歧视了--)——它存储消息等待消费者消费他们。当你開始写产生或者消费消息的代码时,你非常快会发如今处理层会有非常多恶心的问题须要你亲自处理。而Samza的目标就是帮助我们干掉这些恶心的家伙。
    咱们那上面提到的(计算pv并更新到dashboard)样例来说吧。当你的正在跑的消费者机器突然挂掉了,而且你当前的计算的数值丢失了会发生什么?怎么恢复?当机器服务被重新启动时处理该从哪里開始?假设底层的消息系统反复发送了一条信息或者丢失了一条消息怎么办?或者你想依据url来分组统计pv?又或者一台机器处理的负载太大。你想分流到多台机器上进行统计在聚合?
    流式计算为上述问题提供了一个非常好的解决方式,它是基于消息系统更高层次的抽象。

    Samza
    Samza是一个流式计算框架,它有下面特性:
    * 简单的API:和绝大多数低层次消息系统API不同,相比MapReduce,Samza提供了一个很easy的“基于回调(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提供了一个很easy的“基于回调(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中文教程(一)背景的更多相关文章

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

    上一篇和大家一起宏观上学习了Samza平台的架构,重点讲了一下数据缓冲层和资源管理层.剩下的一块非常重要的SamzaAPI层本节作为重点为大家展开介绍.     当你使用Samza来实现一个数据流处理 ...

  2. 【Samza系列】实时计算Samza中文教程(二)——概念

    希望上一篇背景篇让大家对流式计算有了宏观的认识,本篇依据官网是介绍概念,先让我们看看有哪些东西呢?     概念一:Streams     Samza是处理流的.流则是由一系列不可变的一种相似类型的消 ...

  3. Netty4.x中文教程系列(五)编解码器Codec

    Netty4.x中文教程系列(五)编解码器Codec 上一篇文章详细解释了ChannelHandler的相关构架设计,版本和设计逻辑变更等等. 这篇文章主要在于讲述Handler里面的Codec,也就 ...

  4. struts2官方 中文教程 系列十一:使用XML进行表单验证

    在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让 ...

  5. Netty4.x中文教程系列(二) Hello World !

    在中国程序界.我们都是学着Hello World !慢慢成长起来的.逐渐从一无所知到熟悉精通的. 第二章就从Hello World 开始讲述Netty的中文教程. 首先创建一个Java项目.引入一个N ...

  6. Netty4.x中文教程系列(一) 目录及概述

    Netty4.x中文教程系列(一)目录及概述 Netty 提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. Netty是一个NIO客户端 服务端框架 ...

  7. Netty4.x中文教程系列(四) 对象传输

    Netty4.x中文教程系列(四)  对象传输 我们在使用netty的过程中肯定会遇到传输对象的情况,Netty4通过ObjectEncoder和ObjectDecoder来支持. 首先我们定义一个U ...

  8. Netty4.x中文教程系列(三) ChannelHandler

    Netty4.x中文教程系列(四)  ChannelHandler 上一篇文章详细解释了Hello World示例的代码.里面涉及了一些Netty框架的基础. 这篇文章用以解释ChannelHandl ...

  9. ArcGIS_系列中文教程

    转自:http://www.cnblogs.com/gispeng/archive/2008/04/15/1154212.html  ArcGIS_系列中文教程 如链接有问题请在留言中说明ArcGIS ...

随机推荐

  1. 转:CSS定位属性详解

    转载:https://juejin.im/post/5a1bb35ff265da43231ab164 这篇文章对css的绝对定位和相对定位有详细的解释

  2. Java流程控制练习--万年历

    Java流程控制练习--万年历 标签: Java入坑之旅 0x01. 打印倒三角和正三角 public static void main(String[] args) { // TODO Auto-g ...

  3. Win7系统Chrome浏览器缓存查看技巧介绍(转)

    1.Chrome下提供了一个命令chrome://cache,可以查看到保留下来的缓存; 2.但是,当你点击缓存文件,Chrome却并非打开缓存源文件,而是如图所示的二进制编码文件; 3.在Win7系 ...

  4. 前端如何在h5页面调用微信支付?

    在微信服务号开发的时候经常会遇到微信支付的功能实现,通过实际经验自己总结了一下,前端在H5页面调起微信支付有两种办法,一是利用内置对象,二是通过引用微信的js sdk,亲测都能支付成功,从写法上来看用 ...

  5. NET定时任务组件Hangfire

    开源的.NET定时任务组件Hangfire解析 项目慢慢就要开工了,很多园友都在问这个事情,看来大伙对这事很上心啊,事情需要一步步的来,尽量写出一个我们都满意的项目.以前每次在博客前面都会扯淡一下,不 ...

  6. 格式化输出函数:printf 那些事 (C语言)

    printf函数提供格式化输出转换 函数包含在头文件  <stdio.h>  中 #include <stdio.h> ...... 函数的原型在头文件的声明为 _CRTIMP ...

  7. 前端Hack之XSS攻击个人学习笔记

    简单概述 **        此篇系本人两周来学习XSS的一份个人总结,实质上应该是一份笔记,方便自己日后重新回来复习,文中涉及到的文章我都会在末尾尽可能地添加上,此次总结是我在学习过程中所写,如有任 ...

  8. linux学习笔记-7.文件属性

    1.查看文件夹属性 ls -ld test 2.文件夹的rwx --x:可以cd进去r-x:可以cd进去并ls-wx:可以cd进去并touch,rm自己的文件,并且可以vi其他用户的文件-wt:可以c ...

  9. mysql存储过程之游标

    MySQL5 中添加了存储过程的支持.     大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成     存储过程简单来说,就是为以后的 ...

  10. django orm 优化

    .markdown-body hr::after,.markdown-body::after{clear:both}.loopLine,.messageLine0{marker-end:"u ...