参考链接:http://samza.incubator.apache.org/learn/documentation/0.8/introduction/background.html
先了解一下Samza的Background是必不可少的(至少官网上是放在第一个的),我们需要从哪些技术背景去了解呢?
消息系统是一种实现近实时异步计算的流行方案。消息产生时可以被放入一个消息队列(ActiveMQ,RabbitMQ)、发布-订阅系统(Kestrel,Kafka)或者日志聚合系统(Flume、Scribe)。下游消费者从上述系统读取消息并且处理它们或者基于消息的内容产生进一步的动作。 假设你有一个网站,并且每次有人要加载一个页面,你发送一个“用户看了页面”的事件给一个消息系统。你可能会有一些做下面事情的消费者:
* 为了未来做数据分析,存储消息到hadoop;
* 对页面访问量进行计数并且更新到Dashboard
* 如果页面访问失败触发一个报警;
* 发送一封邮件通知另一个用户;
* 带着这个用户的相关信息加入页面展示事件,并且返回信息给消息系统;
总结一下,很显然,一个消息系统能解耦所有这些来自实际网页服务的工作。
大家知道消息系统是一个相当低层次的基础设施——它存储消息等待消费者消费他们。当你开始写产生或者消费消息的代码时,你很快会发现在处理层会有很多恶心的问题需要你亲自处理。而Samza的目标就是帮助我们干掉这些恶心的家伙!
咱们那上面提到的(计算pv并更新到dashboard)例子来说吧,当你的正在跑的消费者机器突然挂掉了,并且你当前的计算的数值丢失了会发生什么?怎么恢复?当机器服务被重启时处理该从哪里开始?如果底层的消息系统重复发送了一条信息或者丢失了一条消息怎么办?或者你想根据url来分组统计pv?又或者一台机器处理的负载太大,你想分流到多台机器上进行统计在聚合?
流式计算为上述问题提供了一个很好的解决方案,它是基于消息系统更高层次的抽象。
Samza是一个流式计算框架,它有以下特性:
目前流行的开源流式计算方案都很年轻,并且没有一个单一系统能提供一个全面的解决方案。在这个领域面临的新难题包括如下几个:1.一个流式计算的状态应该怎样管理;2.流是否应该被缓冲到远程机器的磁盘上;3.当重复的信息被接受或者信息丢失该做什么;4.如何建立底层消息传递系统;
Samza的主要区别在于以下几个方面:
好的,背景就介绍到这里,下一篇咱们一起了解一些概念,方便后续深入学习吧,大家继续加油。