查看原文
其他

有问有答 | Storm技术内幕与实践精华问答

CSDN云计算 CSDN云计算 2019-02-15

戳蓝字“CSDN云计算”关注我们哦!



Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。 随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统等, 大数据实时处理解决方案的应用日趋广泛,目前已是分布式技术领域最新爆发点,而Storm更是流计算技术中的佼佼者和主流。那么,今天“有问有答”第二期,就为大家带来《Storm技术内幕与实践精华问答》,赶快学习起来吧!


1

Q:Storm的实时性处理速度很高,有没有一个最高点的限制?比如在入口处服务器的CPU和内存一定的情况下。在处理实时数据的时候,不用Storm,自己手动写一个分布式处理的模块(类似负荷分担),对比Storm有什么优劣呢?


A:Storm处理速度在毫秒级,实际应用也取决于计算的复杂度和查询的外部数据带来的开销。自己写的话,考虑各种情况的话编码量会多不少,而且消息计算和分发调整没那么灵活,后期在分布式集群中调优也没那么方便;Storm不依赖入口处服务器,主服务器Nimbus根据初始配置等计算好各任务,即把各任务分配到分布式环境的各个worker上,可以设置多个worker实例并行处理入口或者中间的消息解决入口服务器的负载问题,实际开发中只要设计好消息计算和转发的拓扑,让代码更多的关心计算、统计等的业务逻辑,简化了开发分布式应用的门槛。过程如下:


2

Q:实时处理利器Storm与Spark。我们在它们之间做出选择时,应该考虑到哪些指标?或者说它们各自有什么优势?


A:Spark Streaming是批处理,一桶桶的去接水;Storm是流计算(当然Trident也有部分批量处理),接好自来水管子,一条条消息通过管子自动的流到终点;计算方式的不同,导致了两个差异:

1 )往往Storm是毫秒级的,Spark Steaming是秒级以上的应用

2 )无状态的求和、计数等应用Storm更适合,反应实际情况更及时,我们实时意图的功能用了Storm,最快的反应用户最新一条行为;需要分治法、批量计算的应用,用Spark Streaming,对于实时要求高一点的应用,可以根据具体的实际应用的需要,调整“桶”的大小,来提高响应的时间。Spark和Yarn结合的更好,Storm是和Mesos结合的更好。Spark不仅仅包含Spark Steaming,有图计算、MLib、Spark SQL等。


3

Q:对于传统使用数据库的报表,数据有上亿条。用户针对这些数据查询,查询条件包含时间段、区域等等十几个,总之查询条件是多维度的,使用存储过程实现,需要多次group by,耗时近十分钟。请问这种场景下想要实时查询,秒级返回结果,Storm可适用?


A:不是很合适,要么放HDFS中通过Impla,Spark SQL,Kylin等交互式查询,要么通过传统的数据仓库来做,流式计算主要处理实时产生的增量数据。


4

Q:在Storm的学习过程中,感觉难以理解的部分有:1)Storm的反馈机制的设计原理;2)HBase用在线上栏位高可用保障方面的采集过程;3)前端栏位快照数据回流,每次访问过程中商品。这三个问题应该如何理解?


A:1)可以简单参考下图


实际生产环境中需要计算栏位的产品列表不同算法的一些实时指标,不断的反馈模型,修正相关因子或权重。

2)比如,采集0.98等版本的HBase,用默认的JMX不是很好,读到的某些数据往往是溢出的,不是很准,用HBaseClient接口收集相关更精确的数据

3)尽可能的保存每一个点击行为的当前的快照,比如商品当前的订单量、访问量、价格等,用来离线训练,这些数据全部都走tracker方式,数据量比较大,在调用服务端API的时候可以异步写到Kafka,再通过Gobblin等sync到HDFS。


5

Q:Kafka在Storm中的角色是什么呢?是作为分流的解决方案,还是作为通信的工具?Kafka的前置机是什么?数据量大的时候Kafka会不会崩掉?


A:Kafka在Storm之前扮演一个缓冲的消息队列;Kafka最开始的前置一般有Flume等,其他消息也可以直接往Kafka写,Storm的中间过程也可以存到Kafka中,当做一个消息队列来用;双十一的时候,分区设置小,Kafka满了,来不及处理崩过,写Kafka的时候;如果客户端直接写Kafka,也要注意,并发量大会把Kafka搞挂。采用异步写+本地缓存写Kafka,比如log4j写Kafka,基本的异步和本地缓存等已经做了,数据量再大的时候,加一层Flume等。


2019年,我们的新栏目,有问有答今天就到这里啦,明天我们不见不散。两期问答结束后,您对此栏目有什么意见和看法呢?您想要学习哪方面的问题,我们可以根据您提供的话题,有针对性的进行问答。所以,赶快留言吧!


----------------    --------------


1.微信群:

添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


2.征稿:

投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。



推荐阅读


程序员抢票姿势 ↓交朋友还能抢票?


为交流学习,请备注抢票+姓名+公司职位


点击“阅读原文”,打开 CSDN App 阅读更贴心!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存