一段时间来都没有写blog了,感觉东西不写出来更加容易忘记了,写写更扎实!不过,最近确实集中了一些业余时间在看实时计算相关的东西,尤其是kafka、storm这两个东西框架。


kafka的优点:

kafka的思路很好,充分利用了磁盘顺序写入数据,数据读取也是走顺序读的路子,存储的性能超级好,只要几个节点就能处理大量的消息了;

另外,它突破了常规的一些消息中间件由服务端来记录消息消费状态的传统,彻底由客户端自己来记录究竟处理到哪里了,失败也罢成功也罢,客户端本来是最清楚的了,由它来记录消费状态是最适合不过了;

kafka的缺点:

同一个话题的消息,可以按照业务键来分散到不同的节点,同一节点内可以实现消息消费有序,不过你也别指望由kafka来实现消息全局有序了,又要可扩展又要有序简直就是一个神话了,还有也别指望kafka可以不重复的处理消息,不重复不遗漏的处理消息也是所有消息队列遥不可及的梦想了,不过好歹是不会遗漏消息的了;

kafka的0.7版本对可用性和容错性几乎没有任何处理,节点失败了,消息的存储和消费都玩完了,如果机器硬盘彻底挂了,那对不起,消息数据彻底丢了。

上面说了kafka一堆的缺点,但是kafka就凭借它那几个优点就足够行走江湖了。非正常状态下有可能重复处理消息、不能全局有序这些缺点,基本上永远不可能找到办法的了,至于容错方面那在0.8版本中就主要是修复这了,0.8版本稳定之日就是它大行其道之时。看了kafka的实现原理之后,我有一个冲动就是用Java去把它实现一把,再一细看早有人做了这个了,已经离开淘宝的庒晓丹、无花两位连袂用Java实现了一个类kafka的metaq,并且已经在淘宝得到大量的应用,最难得的是它开源了。

至于kafka可以用在那里,且看下面会细说。


话说storm

storm绝对是一个好东西,无论你用与不用都值得去研究一把,看着看着就觉得这个作者真是妙不可言,能把那么复杂的事情抽象得这么好,能把数学用到极致,反正我看完它实现消息确保被执行一次的方式之后有这样的感觉。

就拿推荐来说事吧,大量的用户、大量的数据、实时的推荐,想想头都要痛,怎么办才好呢?

storm就有办法了,Spout从数据源取得数据,Bolt为一个一个的业务逻辑处理节点,Bolt可以merge也可以split起来处理数据,最终完成整个业务逻辑处理,输出结果。总之分分合合,就像河水从曲曲折折的河道一直流向大海一样,所以说这种数据处理方式叫做流式计算。


今次就到这里吧,明天补上。


Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐