面试题-Storm框架
前言
Storm框架在实际项目中已经平稳运行快一年了,也很好的支撑了海量读写器的数据处理需求,不过和RabbitMQ一样,为了项目进度,实际工作中只能尽快的调研,关注一些关键点,其他的细节就只能放一放。这次面试题总结也希望自己能够在关于提升我项目亮点的框架上多下一些功夫,被问到一些技术细节时,能够做到心中有数。
Storm实时流计算框架
Storm与hadoop对比?
- 应用场景:Storm专注于分布式实时流处理;Hadoop关注的是离线批处理
Storm集群架构是什么样的,简单介绍一下
Storm是master/slave架构,在传统的master/slave架构中,主节点一般负责任务的接受分配和监控,从节点负责具体任务的执行,Storn框架也类似,但是在其中有一些不同:
- nimbus主节点依然负责集群中分发任务以及监控
- supervisor从节点会启动一个worker来执行具体的任务,一个worker就是一个JVM进程
实际项目中,有四个服务器节点,选择了两台机器部署supervisor,防止单点问题;把nimbus和zookeeper部署在另外一台服务器上,只部署了一个实例,这个是根据Storm官方文档推荐部署的。因为对我们的业务系统来说,nimbus和zookeeper本身负载不算高。
Storm集群中的任务是什么样子的?简单介绍一下
Storm集群中的任务叫做拓扑,拓扑中包含两种类型的组件:
- Spoult:负责对接外部数据源,获取数据
- bolt:负责处理数据
我们实际项目中,有一个spoult对接RabbitMQ获取读写器实时数据,一个bolt组件进行去重分组以及相关统计信息的计算。处理完毕的数据,会继续传递到RabbitMQ中等待下层服务处理。
Topology在Storm集群中是如何分发的?
- storm jar命令上传jar包到storm的nimbus节点
- nimbus节点根据配置的信息查询空闲的worker
- 分配任务到具体的worker中,worker从nimbus下载待处理的jar包
具体的线程模型是怎样的?并发度如何设置?
Storm中多线程的设置叫做并发度,一个bolt或者spoult如果并发度设置大于1的话,就会实例多个,每一个对应一个线程去处理。
我们实际项目中,从RabbitMQ中获取数据使用了并发度为2的设置,一可以提高处理速度,二可以防止单点问题。bolt实际处理线程设置为10,分别对应了epc尾数0-9,可以并发的处理
消息是如何分发的?如何进行grouping分组设置?
storm中可以通过设置grouping分组,来自定义消息的分发细节。比如随机分组,按字段分组
我们实际项目中,使用的是按字段分组,分组字段是epc的后一位,相同epc尾数的可以被分到同一个线程处理,保证了线程安全问题。
Storm中是如何保证消息可靠性的?
Storm中消息链中的处理过消息的链条都会产生一个以数据源为tuple头的处理链,链上的每一个节点都需要显式的说明处理成功或者失败,如果有一个没有显式处理,那么这个消息就没有正确处理完毕。如果超时时间范围内没有处理完毕,就算处理失败。
如果成功处理或者处理失败,Storm框架会回调Spoult中的ack方法或者fail方法,可以在里面做可靠性的后续业务处理。
面试题-Storm框架的更多相关文章
- Storm框架:Storm整合springboot
我们知道Storm本身是一个独立运行的分布式流式数据处理框架,Springboot也是一个独立运行的web框架.那么如何在Strom框架中集成Springboot使得我们能够在Storm开发中运用Sp ...
- Storm框架入门
1 Topology构成 和同样是计算框架的Mapreduce相比,Mapreduce集群上运行的是Job,而Storm集群上运行的是Topology.但是Job在运行结束之后会自行结束,Topolo ...
- Storm框架基础(一)
* Storm框架基础(一) Storm简述 如果你了解过SparkStreaming,那么Storm就可以类比着入门,在此我们可以先做一个简单的比较: 在SparkStreaming中: 我们曾尝 ...
- java面试题-常用框架
Spring Spring 是什么 一个开发框架,一个容器,主要由面向切面AOP 和依赖注入DI两个方面,外加一些工具 AOP和IOC AOP 面向切面 AOP是一种编程思想,主要是逻辑分离, 使业务 ...
- [大数据面试题]storm核心知识点
1.storm基本架构 storm的主从分别为Nimbus.Supervisor,工作进程为Worker. 2.计算模型 Storm的计算模型分为Spout和Bolt,Spout作为管口.Bolt作为 ...
- 面试题: Spring 框架 Bean的生命周期
[Java面试五]Spring总结以及在面试中的一些问题. 1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本 ...
- 【分布式】流式计算Storm框架
Storm简介: Storm起源Twitter开源的一个类似于Hadoop的实时数据处理框架,不过两则还是有区别的,Hadoop是批量处理数据,而Storm处理的是实时的数据流. Storm应用场景: ...
- java面试题——集合框架
先来看一下集合框架关系图 Collection FrameWork 如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └S ...
- Storm框架:如何实现crontab定时任务
Storm除了能对消息流进行处理,还能实现crontab定时任务. 只要在bolt中配置TOPOLOGY_TICK_TUPLE_FREQ_SECS项即可实现. @Override public Map ...
- Storm框架:如何根据业务条件选择不同的bolt进行下发消息
Strom框架基本概念就不提了,这里主要讲的是Stream自定义ID的消息流.默认spout.bolt都需实现接口方法declareOutputFields,代码如下: @Override publi ...
随机推荐
- 使用C#构建一个论文总结AI Agent
前言 我觉得将日常生活中一些简单重复的任务交给AI Agent,是学习构建AI Agent应用一个很不错的开始.本次分享我以日常生活中一个总结论文的简单任务出发进行说明,希望对大家了解AI Agent ...
- svtools lmerge具体算法
svtools具有不同的子命令以实现不同的功能,其中一个就是lmerge.根据其帮助文档(merge LUMPY calls inside a single file from svtools lso ...
- 《入梦》Revisited
寝室里有本<美丽新世界>(Brave New World),书页翻过灯塔里上升的螺旋阶梯,还有大概三分之一的篇幅是<重返美丽新世界>(Brave New World Rev ...
- 连接Redis 错误的解决方法: It was not possible to connect to the redis server(s); to create a disconnected multiplexer
The error you are getting is usually a sign that you have not set abortConnect=false in your connect ...
- Redis持久化(RDB、AOF)
为什么要持久化 Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘中,那么一旦服务器进程退出,服务器的数据库状态就会消失(即断电即失).为了保证数据不丢失,我们需要将内存中的数据存储到磁盘, ...
- 容器的优势,在Docker中运行Tomcat
本文分享自天翼云开发者社区<容器的优势,在Docker中运行Tomcat>,作者:d****e 一.容器与虚拟机的区别是什么 虚拟机:虚拟机是通过Hypervisor(虚拟机管理系统,常见 ...
- Windows中使用http-server搭建一个本地服务
我们在开发中,经常会需要搭建一个本地服务去浏览开发的静态html文件,如果当静态文件中存在一些http.https或者访问文件之类的请求时,直接双击打开html文件是会报错预览不成功的,这时候就需要将 ...
- AI工具推荐——open-interpreter
前言 Open Interpreter 是一个能让大型语言模型在你本地电脑上运行代码的工具. 简单来说: 它提供了一个类似于 ChatGPT 的自然语言界面,让你能通过代码与电脑互动. 你可以用它来: ...
- 1.Vue3 配置开发-测试环境
1.根目录新建.env.testing..env.donline文件 2.package.json=>scripts中配置 "start": "vue-cli-se ...
- Luogu P10843 Turtle and Cycles 题解 [ 蓝 ] [ 差分 ] [ 前缀和 ] [ 贪心 ] [ 数学 ]
Turtle and Cycles:修改转化为交换差分数组的 trick 运用.这个 trick 实际上在 NOIp2021 里出过一次了. 转化 首先,\(a_{(i - 1) \bmod n} + ...