面试题-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 ...
随机推荐
- 痞子衡嵌入式:Farewell, 我的写博故事2024
-- 题图:苏州周庄古镇双桥 2024 年的最后一天,照旧写个年终总结.今年工作上稳步发挥,但是在生活上收获了一个新的爱好,大家可能知道,痞子衡比较爱运动,一直有在打篮球羽毛球桌球.有感于公司乒乓球文 ...
- 【Java 温故而知新系列】基础知识-02 数据基本类型
1.Java基本数据类型 Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间. 基本数据类型 数值型:整数类型(byte,short,int,lon ...
- 【Java 温故而知新系列】基础知识-01 概述
1.什么是Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了 C++里难以理解的多继承. 指针等概念,因此Java语言具有功能强大和简单易 用两个特征.Java语言作为 ...
- [LC793]阶乘函数后 K 个零
题目描述 f(x) 是 x! 末尾是 0 的数量.(回想一下 x! = 1 * 2 * 3 * ... * x,且 0! = 1 ) 例如, f(3) = 0 ,因为 3! = 6 的末尾没有 0 : ...
- CDS标准视图:维修工单实际成本数据 I_MaintOrderActualCostDataCube
视图名称:维修工单实际成本数据 I_MaintOrderActualCostDataCube 视图类型:基础 视图代码: 点击查看代码 @VDM.viewType: #COMPOSITE @AbapC ...
- 20250110-FortuneWheel 攻击事件:竟然不设滑点,那就体验一下 Force Investment 吧
背景信息 攻击交易:https://app.blocksec.com/explorer/tx/bsc/0xd6ba15ecf3df9aaae37450df8f79233267af41535793ee1 ...
- 《SpringBoot》史上最全SpringBoot相关注解介绍
@SpringBootApplication @SpringBootApplication看作是 @Configuration.@EnableAutoConfiguration.@ComponentS ...
- C#使用yield关键字提升迭代性能与效率
前言 yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,减少了内存占用,并允许在迭代时执行复杂逻辑. 传统迭代和yield迭代方式对比 咱们来看看传统迭代方式和yie ...
- webstorm前端vue项目安装依赖包总结
npm install提示错误信息,与node.js版本有关.以下是用到的一些命令行参数: 1.清除npm的缓存:npm cache clean --force 2.设置npm下载镜像:npm con ...
- Java开发自学第一天
Java学习日志 Day 01|2025/2/11|累计1天 今日学习时长 6小时 当日学习目标 1.了解JVM.JDK.JRE 2.学习Idea开发工具的基本使用 3.基本语法:运算符.数据类型.变 ...