前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于JStorm开发一个实时计算平台

基于JStorm开发一个实时计算平台

作者头像
用户7533190
发布2020-07-06 17:05:56
9240
发布2020-07-06 17:05:56
举报
文章被收录于专栏:基哥杂记基哥杂记

什么是实时流式计算

实时流式计算,也就是RealTime,Streaming,Analyse,在不同的领域有不同的定义,那么,到底什么是实时流式计算呢?谷歌大神Tyler Akidau在《the-world-beyond-batch-streaming-101》一文中提到过实时流式计算的三个特征:

  • 无限数据
  • 无界数据处理
  • 低延迟

无限数据指的是,一种不断增长的,基本上无限的数据集。这些通常被称为“流数据”,而与之相对的是有限的数据集。

无界数据处理,一种持续的数据处理模式,能够通过处理引擎重复的去处理上面的无限数据,是能够突破有限数据处理引擎的瓶颈的。

低延迟,延迟是多少并没有明确的定义。但我们都知道数据的价值将随着时间的流逝降低,时效性将是需要持续解决的问题。

应用场景

1.日志分析

比如对网站的用户访问日志进行实时的分析,计算访问量,用户画像,留存率等等,实时的进行数据分析,帮助企业进行决策。

2.物联网

比如对智能安防应用来说,对智能门锁、IPCamera、红外感应等设备进行实时的数据采集,加入AI侦测,异常时进行报警。并可根据历史数据进行实时的分析,预测,发现行为异常。

3.CDN

比如监测CDN机器的资源使用情况,当某些地区的机器资源不足时,能触发平台自动扩容,满足业务需求。

业界有那么多的实时计算框架,该如何选型?

产品

API

保证次数

容错机制

状态管理

延时

吞吐量

Storm

组合式

At-least-once

Record ACK

Spark Streaming

声明式

Exactly-once

RDD CheckPoint

基于DStream

中等

Flink

声明式

Exactly-once

CheckPoint

基于操作

API

Storm 使用基础 API 进行开发,比如实现一个简单的 sum 求和操作;而 Spark Streaming 和 Flink 中都提供封装后的高阶函数,可以直接拿来使用。

保证次数

在数据处理方面,Storm 可以实现至少处理一次,但不能保证仅处理一次,这样就会导致数据重复处理问题,所以针对计数类的需求,可能会产生一些误差;Spark Streaming 和 Flink 通过事务可以保证对数据实现仅一次的处理。

容错机制

Storm 通过 ACK 机制实现数据的容错机制,而 Spark Streaming 和 Flink 可以通过 CheckPoint 机制实现容错机制。

状态管理

Storm中没有实现状态管理,Spark Streaming 实现了基于 DStream 的状态管理,而 Trident 和 Flink 实现了基于操作的状态管理。

延时

表示数据处理的延时情况,因此 Storm 和 Flink 接收到一条数据就处理一条数据,其数据处理的延时性是很低的;而 Trident 和 Spark Streaming 都是小型批处理,它们数据处理的延时性相对会偏高。

吞吐量

Storm 的吞吐量其实也不低,只是相对于其他几个框架而言较低;Spark Streaming 和 Flink 的吞吐量是比较高的。

为了满足我们的业务场景要求,我们最终选择基于Storm做二次开发,规划了一个Thor平台,实现了告警的实时计算,对于一些敏感型告警,在30秒内即可快速决策

原先我司的告警系统,是在将采集的数据持久化到数据库后,再通过类SQL进行聚合计算生成告警的,对于一些敏感型告警,实时性是满足不了客户要求的。同时对于一些复杂的告警逻辑,类SQL也难以实现。

监控数据是属于无状态的,且要保证低延迟,所以我们最终选用Storm,但Storm更多的只是一个实时的并行计算框架,很多问题需要额外地处理,如数据如何接入Storm的计算流?对不同的数据类型如何处理?计算数据怎么存?系统怎么监控等等。为了解决这一系列的问题,在Storm的基础上规划了Thor这样一个实时的计算平台。

Thor系统的受众

有明显的实时特性,数据计算量超过单台处理能力,追求高稳定性、简易开发的计算需求。

Node Cluster

消息生产集群,接入不同的数据源类型,生产待计算的原始消息。如接收sdn推送的监控采集数据,以每一行为一条计算数据提交。

Message Cluster

使用kafka消息中间件,暂存计算消息。实现数据的流式输入。

Jstorm Cluster

核心计算集群,基于storm的java版本,改进HA问题和计算性能优化。

Monitor Cluster

集群状态监控,负责进行集群内部的组件状态、topology计算状态的监控报警

Thor UI

UI作为实时计算平台的运营界面,主要任务是各个组件的运行状态收集、消息任务配置、监控报警展示、系统配置等。

状态码告警示例:

下一步计划,提升平台的运营能力,分布式特性导致问题排查复杂度较高

  • 完善全流程的监控方案,TPS链路监控设计来发现组件、topo的异常
  • thor集群双主方案实施
  • thor-node 数据分配数据不均匀,某个节点负载较高
  • topology 资源调度不均衡,比如某些topo只跑1个机器
  • worker 使用cpu 资源不合理 某些worker 使用了多个core
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 基哥杂记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • API
  • 保证次数
  • 容错机制
  • 状态管理
  • 延时
  • 吞吐量
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档