storm面试题

  • 提高并发度

    • 工作进程的数量 topology.workers : 1
    • 执行器的数量
    • 任务的数量
  • 当Nimbus或Supervisor守护进程死亡时会发生什么?
    Nimbus或supervisor的死亡不会影响worker流程,遇到任何意外情况时进程自毁,所有状态保存在Zookeeper或磁盘上

  • Nimbus是单点故障吗?
    如果丢失了Nimbus节点,worker仍将继续运行.如果worker死掉,nimbus将继续重新worker。但是,如果没有Nimbus,worker将不会在必要时重新分配给其他计算机

  • Storm如何保证数据处理?

    • Storm提供了保证数据处理的机制
    • worker死了,nimbus可以启动worker.如果它在启动时连续失败并且无法接受Nimbus的心跳,Nimbus将重新安排worker
    • 节点死了,分配给该计算机的任务将超时,Nimbus会将这些任务重新分配给其他计算机
  • storm的可靠性如何实现,包括spout和bolt两部分?

    • spout端 :
      • ack机制与fail机制
      • 对于tuple树上的每个bolt进行确认应答,spout才会调用ack来表明这个消息被完全处理,如果任何一个bolt处理的tuple报错。调用ack.
    • bolt端:
      • ack机制与fail机制
  • storm分组策略方式?

    • Shuffle Grouping: 随机分组,轮询,平均分配
    • Fields Grouping:按字段分组
    • All Grouping:广播发送
    • Global Grouping:全局分组
    • Non Grouping:不分组
    • Direct Grouping:直接分组
    • Local or shuffle grouping
    • 自定义分组
### Storm 常见面试题及其解答 #### 1. Storm 是什么类型的处理框架? Storm是一个分布式实时计算系统,专为高吞吐量的在线处理而设计[^1]。它能够可靠地处理无限的数据流,在数据到达时立即进行分析和响应。 #### 2. 如何理解拓扑结构(Topology)的概念? 在Storm中,Topology表示的是由Spout(源头) 和Bolt(处理器节点)组成的网络图,用于定义如何接收输入源并执行一系列操作来转换这些事件流最终得到所需的结果。 #### 3. Spout 和 Bolt 的区别是什么? - **Spout**: 负责读取外部数据源并将它们作为元组(tuple)形式发送到topology中的其他组件;可以看作是消息队列消费者。 - **Bolt**: 接收来自spouts或其他bolts发出的消息, 进行加工处理后再转发给下游组件或存储起来; 类似于业务逻辑层。 #### 4. Storm 中的任务调度机制是如何工作的? 当提交一个新的 topology 到集群上运行时,Nimbus (master node)会负责分配资源以及协调工作进程之间的通信。Supervisor nodes则监听nimbus指令启动worker processes 来实际承载各个 spout/bolt 实例的工作负载。每个 worker process 可能包含多个线程(thread),每条线程对应着特定 task id 执行具体的 bolt 或者 spout 功能。 #### 5. 解释一下 Acking Mechanism (确认机制) 为了保证至少一次交付语义(storm默认), 当一个 tuple 成功被所有订阅它的 bolts 完成处理后, 需要向原始发射此tuple的那个 spout 发送ack信号表明该记录已被完全消费完毕。如果中途失败,则会触发 fail 方法通知上游重试直到成功为止。 ```java // 示例代码展示如何实现自定义Ack机制 public class MyCustomSpout extends BaseRichSpout { private static final long serialVersionUID = 1L; @Override public void nextTuple() { // Emit a new message with an associated MessageId for tracking purposes. collector.emit(new Values("test"), UUID.randomUUID().toString()); // Simulate some delay before emitting the next tuple. Utils.sleep(10); } @Override public void ack(Object msgId) { System.out.println("Message " + msgId + " has been successfully processed."); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值