【samza系列】实时计算框架Samza学习指南-前言

    首先欢迎大家来到这里和笔者一起共同学习出自LinkedIn的一款优秀的实时计算框架Samza。我目前就职于百度,负责电商数据平台架构和开发的工作,大数据离线和在线计算平台都需要投入精力搭建、使用和维护,特别对实时计算这一块的技术感兴趣,也使用过storm等流式计算框架;运用了一段时间后,我想逐步深入了解实时计算框架底层的实现,碍于storm大部分是clojure实现的,对于java出身的我不太合适;突然有一天发现了Samza,尽管大部分代码是Scala实现的,但是至少对java程序员应该成本相对较小嘛,而且这个框架的作者针对Lambda架构(hadoop+storm)提出的Kappa架构(Kafka+Samza)也确实让我这个搞数据平台的眼前一亮!,再加上这个框架代码目前的实现不到1万行,何乐而不为呢?那这个新事物,中文书肯定是没有了,只能从官方文档学起,本着我为人人,人人为我的思想,决定在学习之余将官方文档精简转化为中文,方便大家更快地掌握Samza的使用,当然随着时间推移官方文档可能会有更新,所有如果总结翻译的有误的地方还请留言告知!我的email: [email protected]

    在正式进入主题之前,我想大家总有着需不需要学习和使用这个新生事物——samza的念头,大部分人对这种新东西到底能给我们带来什么,怀有满心的期待,要不大家为什么要去掌握它呢?如果你还没有满心期待,请务必看完引导篇,在进入我们的正题,以免误入歧途,大家时间都很宝贵,我也不想浪费大家美好的时光。引导篇主要来自我对Samza的一些调研总结,希望先让大家宏观上了解它,因为对于一个未知的事物,让你投入精力去搞定它是一件危险的事情,你很可能三分钟热度或者更好一点——半途而废,当然这都是笔者不愿意看到的。


     先正儿八经来一发网上的介绍吧。Twitter的流处理系统Storm最近出现了一个“翻版”——Samza。Samza是近日由LinkedIn开源的一项技术,它是一个分布式流处理框架,专用于实时数据的处理,非常像Twitter的流处理系统Storm。不同的是Samza基于Hadoop,而且使用了LinkedIn自家的Kafka分布式消息系统。Storm和Samza极其相似,就像LinkedIn的Chris Riccomini在博客中阐述的那样:“[Samza]可以帮助你构建应用,处理消息队列——更新数据库、计数以及其他的聚合、转换消息等等。”而这些其实都是很经典的Storm应用,只不过迁移到Samza之上了,Samza文档也对比了这两个系统。

     为什么会诞生Samza?
    作者Chris谈到,当开始用Kafka和他们系统中的所有数据做流处理的时候,他们是从一个类似Web服务的东西开始的,它会启动,从Kafka读取消息并做一些处理,然后将消息写回。在做这件事的时候,他们意识到,要使它真正有用并具备可扩展性,有许多问题需要解决。比如分区:如何划分流?如何划分处理器?如何管理状态,其中状态本质上是指在处理器中维护的介于消息之间的东西,或者如果每次有消息到达的时候,计数器就会加1,那么它也可以是像总数这样的东西。如何重新处理?至于失败语义,我们会得到至少一次,或者至多一次,或者恰好一次消息,也有不确定性。如果流处理器与另一个系统交互,无论它是个数据库,还是依赖于时间或者消息的顺序,如何处理那些真正决定最终输出结果的数据?
    相信在搞实时计算的同学们或多或少也会碰到这些问题,而Samza就是试图解决其中的部分问题。那大家肯定都会问了既然普遍存在的问题,我也可以用storm或者spark来解决呀?的确是可以用他们来解决,但是Samza有自己的优势,相对于storm而言其底层的实现语言是scala和java,而storm则大部分是clojure,而且代码不到万行,如此小而美,使得我们可以更加低成本地去了解其实现并作扩展和优化,而对于spark这个以scala语言实现的平台级产品,的确是一个好东西,但是要摸头它恐怕会相当花时间,如果你想要摸清实时计算的实现,我觉得Samza正是你的最佳选择对象。
    这里我也想补充一下我对Scala语言的一些想法,毕竟目前不少好的开源高性能系统都有Scala的身影,作为程序员中的大部分都是java阵营的来说,未来的发展方向很可能是基于jvm的多语言混合开发模式,如果你只是拘泥于像java这种注重企业级应用的语言,你很可能只能去开发企业应用了,这很明显是悲催的,至少以后找工作的选择就少了,这里我也不能把话题扯太远,推荐大家一本书《深入理解Java虚拟机——JVM高级特性与最佳实践》,大家要想往更高的位子走就必须掌握底层的技术,成为jvm开发工程师,掌握面向对象的java是不够的,还得掌握函数式编程语言,作为面向对象与函数式编程的集大成者Scala,大家最好也能掌握,毕竟比如spark和samza都是用scala实现的,不会它你还怎么玩下去呢?
    好了笔者说了这么多,希望大家能够做到以下三件事情,或许大家离高级实时计算工程师迈出了一大步哦,先恭喜一下,哈哈
    1.看笔者后续对官网文档的翻译及总结,英文好的可以直接看英文文档
    2.学习jvm和scala
    3.打开Samza源码畅游其中吧

你可能感兴趣的:(大数据,实时计算,Samza)