博客
关于我
[整理] Storm 基础
阅读量:433 次
发布时间:2019-03-06

本文共 1345 字,大约阅读时间需要 4 分钟。

Storm技术解析:分布式实时计算引擎

什么是Storm?

Apache Storm 是一款开源的分布式实时计算系统,旨在处理大规模数据流中的复杂计算任务。Storm 的核心特点体现在三个关键属性上:

  • 分布式:Storm 的计算和存储分散在多台服务器上,通过集群方式完成任务。
  • 实时:系统能够在毫秒级或秒级响应数据,适合对实时性有严格要求的场景。
  • 计算:Storm 可以对流数据进行复杂的处理,如数据清洗、转换等。
  • Storm 的设计理念强调高效处理大规模数据流,常见应用包括实时数据分析、网络流量监控、金融交易系统等。

    我们使用Storm做了什么?

    在实际项目中,我们利用Storm构建了一套消息处理系统,主要用于解决以下问题:

  • 消息下发监控:跟踪消息的传输状态,包括是否成功下发、用户是否接收、消息是否被点击等。
  • 消息效果分析:统计消息的传递量、有效率以及用户互动数据。
  • 基于这些需求,我们设计并实现了一套埋点方案,通过在关键节点打日志的方式,记录消息在不同环节的状态和处理结果。

    背景与需求

    消息管理平台虽然功能简单,但其后端涉及多个系统,消息传输链路较长。一个消息可能需要经过7个系统处理,每个环节都可能导致消息丢失或失败。这种复杂性使得问题排查效率低下,尤其是面对突发问题时,及时响应变得尤为重要。

    我们需要实现两个核心功能:

  • 快速定位消息问题:能够查询用户当天所有消息的下发情况,明确是哪个系统导致消息未送达。
  • 实时下发数据分析:查看消息的整体下发情况,包括传递量、过滤量和用户点击数据。
  • 需求实现

    为了解决上述问题,我们设计了一个基于Storm的埋点方案。具体实现步骤如下:

  • 日志收集:利用logAgent将各系统的日志收集到Kafka中。
  • 日志清洗:Storm负责对收集的日志进行清洗处理,提取有用信息。
  • 数据输出:清洗后的数据输出至Redis(实时)或Hive(离线)。
  • Storm在日志清洗环节发挥了关键作用。通过对关键节点进行埋点,我们可以收集到消息在传输过程中的完整状态。例如:

    • 11:用户未绑定手机号。
    • 12:用户最近收到相同消息。
    • 13:用户屏蔽了消息...

    这些点位记录在关键位置,形成完整的消息传输轨迹,便于后续分析和排查。

    Storm架构

    Storm的工作流程如下:

  • 任务提交:通过StormSubmitter提交任务,上传至Nimbus节点。
  • Nimbus处理:Nimbus将任务交给Supervisor节点,负责任务分配和监控。
  • Worker进程:Supervisor创建Worker进程,每个Worker负责多个Task。
  • Task执行:Task作为Bolt或Spout的实例,处理数据流。
  • Storm的架构具有高度的并行处理能力,支持多种Grouping策略。例如:

    • shuffleGrouping:随机分组,提升数据分布性。
    • fieldsGrouping:按字段分组,确保同一数据流路处理一致性。

    最后

    Storm 是一个强大而灵活的分布式计算框架。通过合理配置和拓扑结构设计,可以实现复杂的数据处理任务。对于实时数据分析和消息处理,Storm 展现出显著优势。

    如果想深入了解Storm 的具体实现和使用方法,可以参考其官方文档或相关技术博客。

    转载地址:http://ehcuz.baihongyu.com/

    你可能感兴趣的文章
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    查看>>
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    查看>>
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>
    python 加密解密(base64, AES)
    查看>>
    Python 包管理器和 Node.js
    查看>>
    Python 单词字母顺序不变且所有倒排
    查看>>
    python 反射机制
    查看>>
    python 启动提示IDLE's subprocess didn't make conne...
    查看>>
    python 命令接口_实现“[命令][操作][参数]”样式的命令行接口?
    查看>>
    Python 和 OpenCV.如何检测图像中的所有(填充)圆形/圆形对象?
    查看>>
    Python 和 RabbitMQ - 聆听来自多个渠道的消费事件的最佳方式?
    查看>>
    python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
    查看>>
    python编译exe同时支持32位_第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe...
    查看>>
    Python 和Java 哪个更适合做自动化测试?
    查看>>
    Python编程:掌握高级语言程序设计。从零基础到精通,收藏这篇就够了!
    查看>>
    python 图片转ico
    查看>>
    python 图片转文字、语音转文字、文字转语音保存音频并朗读
    查看>>
    python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
    查看>>