大数据下的实时热点功能实现讨论(实时流的TopN)

我司内部有个基于jstorm的实时流编程框架,文档里有提到实时Topn,但是还没有实现。。。。这是一个挺常见挺重要的功能,但仔细想想实现起来确实有难度。实时流的TopN其实离大家很近,比如下图百度和微博的实时热搜榜,还有各种资讯类的实时热点,他们具体实现方式不清楚,甚至有可能是半小时离线跑出来的。今天不管他们怎么实现的,我们讨论下实时该怎么实现(基于storm)。
20180415 08:40 百度实时热点
20180415 08:40 微博实时热点
  假如我们现在有一些微博搜索记录,求某个时间窗口(以5分钟为例)Topn其实就是对微博搜索记录做word count,然后排序截取前N个。离线情况下可以这么简单的解决了,但在实时流数据下,你每个时刻都会有新数据流进来,当前时刻你拿到数据里的topn在下一时刻就不一定对了。
  一个时间窗口的TopN结果必须是建立在该时间窗口的全量数据上的才能保证100%的正确性,然而在实时流情况下,由于各种不确定性的因素,你很难在一个时间窗口内拿到上个时间窗口的数据。以5分钟窗口为例,你想这个5分钟内就求出上个5分钟的热点Topn,但是很可能正常情况下5分钟只能拿到99%的数据,10分钟拿到99.9%的数据,甚至30分钟才能几乎拿到100%的数据。如果数据来源异常,很可能几个小时你都不大可能拿到某个5分钟窗口内的全部数据。百度热搜和微博热搜都没有说这些结果是哪个时间段的,就是想给自己留条后路,万一内部出故障了,好几个小时数据不更新,用户也看不出,哈哈。
  在现实情况下,这个5分钟的热点数据可能下个5分钟就得展示给用户,当然异常情况除外,那我们就可以退一步,稍微牺牲一点数据准确性来给出一个堪用的结果。这里有个非常简单可行的方案,实时流计算只做word count,然后把计算结果存储起来后有个旁路程序扫结果数据,排序后截取TopN,我估计好多人就是怎么做的,架构如下。
这里写图片描述
  这个解决方案优点很明显,因为前面storm就是一个word count,简单可靠。但是如果面对大量的TopN调用,旁路Topn程序就会成为性能瓶颈,因为要涉及到大量的数据查询和排序,而且多一个系统,维护成本也变高了。如果我们想通过纯storm的方式去解决Topn应该怎么做?
  在实时热点topn计算过程中,整个计算包含word count和TopN两部分。另外有几个需要特别注意的地方,首先Topn是建立在全量数据上的,最后肯定只能由一个节点输出TopN值,所以需要在前面的计算节点尽可能的减少对后面传送的数据量。其次,像这种业务数据统计基本上都会出现数据热点的问题。

Word count

先来看下word count的部分如何做,如何解决数据热点,如何减少对后面的压力,我直接上topo图。
这里写图片描述
  其实在bolt中加cache就可以大大减少发出去的消息量,这里我还有个step2的bolt,是因为我们在实践中发现,如果多个bolt对hbase同可以key写入,虽然可以通过hbase的Increment来保证数据的一直性,但在其过程中要对行加锁,高并发的情况下写入性能会受影响。所以可以先数据流随机shuffle到step1,然后对流量做泄压,然后按key fieldsGrouping到Step2,由step2中的bolt对hbase的数据做get add put的三步操作,没有hbase的加锁操作,grouping后也没并发写一个rowkey的问题。

TopN

如果我们已经有count好的<词,词频>数据,其实我们并不需要全局排序后截取前n个来实现topn,其实用最小堆就可以大幅度减少TopN的时间复杂度。假设数据量为M,排序的时间复杂度可能到O(MlogM),用最小堆求TopN时间复杂度为O(MlogN),实际情况下N远小于M,这个优化还是非常大的。在实时流TopN中我们也可以用最小堆做性能优化,topo图如下。
这里写图片描述
  在spout方法数据的时候做fieldsGrouping,然后step1中的每个bolt就会维护一部分数据的TopN最小堆,缓冲一段时间后把minHeap里的数据全量发给finalTopN,finalTopn拿到数据后和自己的minHeap已合并就可以拿到正真的topn了。

最终实现

要实现实时热点功能,其实讲上面两个 word count和topn的topo合并起来后就好了,最终的topo如下。
这里写图片描述
   spout收到消息后随机shuffle,step1中的bolt讲一部分统计结果写入cache,待cache失效的时候按key fieldsGrouping到step2,这样可以减少对发出的消息量。 step2中的bolt不仅有个cache还有个minheap,cache中存的是每个key的wordcount,minheap其实是维护的改bolt拿到部分数据的topn。step2中cache数据会失效,失效的时候需要数据更新到hbase中,同时也更新minheap。step2中的minheap超时后,全量数据丢到finalTopn中,再由finalTopn汇总。
   在最后一步finalTopn中,同一个key可能由step2多次传下来,所以finalTopn更新其minheap的时候不能只是简单的和根节点做对比,heap中有的话要更新其值。

其它问题

1. 各过程中cache和minheap的失效机制什么设?

cache失效机制我有遇到过相关的例子,一般是数据量或是cache大小触发的,其实这个是做成参数配置的,在不同的业务环境下可能有不同的适合配置。minheap只能以超时时间为触发条件,超时事件设多少得看具体情况了。感觉都是超参,需要调。

2. 如何保证数据不丢?

storm的acker机制就可以保证数据at least once,就是保证数据不丢,但不保证数据不重复,如果真的需要exactly once,还是放弃jstorm吧,可以用flink试试。但我觉得其实在这种非数据强一致性的情况下,ack机制都不需要开,比较storm的ack还是要消耗一定性能的(有看过别人的数据,开启acker要消耗10%以上性能,参考下)。 在我上图topo设计下,如果集群中有一台机器宕了,cache里的数据就全丢了,其实可能损失也不小,但是机器宕机毕竟还是个小概率事件。

3. 最终数据如何尽可能准确?

对一个时间窗口的维护时间越长,越可能拿到全量数据,结果就越准确。这个肯定的最后那个finalTopn的bolt来做了,数据量越大,finalTopnbolt 的挑战也就越大,我觉得可以起多个bolt,按时间窗口Grouping,然后还得对minheap所有数据做持久化,还得支持持久化后的更新,可以对minheap序列化后放到hbase里。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31841.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT怎么用?自媒体要怎么利用gpt

ChatGPT怎么用&#xff1f;ChatGPT是一种基于人工智能的聊天机器人&#xff0c;它可以为新媒体作者提供各种有用的工具和资源&#xff0c;以帮助他们更好地创作内容。chatgpt要怎么用&#xff1f;以下是一些ChatGPT可以帮助新媒体作者创作的具体方法和示例。 1. 创意灵感 创意…

我的GPT-4 API 接入之旅

3月15日open-ai推出GPT-4 https://platform.openai.com/docs/models/gpt-4 chatgpt免费体验入口&#xff1a; http://chat.xutongbao.top 需要排队 28号加入等候队列 29号收到邀请 检查可用的model const { Configuration, OpenAIApi } require(openai)let listModels []…

ChatGPT + MindShow搞定PPT制作

一、获取PPT内容大概 1、进入chatgpt 官网&#xff1a;http://chat.openai.com&#xff0c;账号密码登录。 2、获取PPT内容 向他提问&#xff0c;提问格式如下&#xff0c;整理一份PPT大纲&#xff0c;主题是“如何使用热门AI工具”&#xff0c;回答内容采用Markdown的形式 二、…

[C++调试笔记]define.h

/* 取Ti2Te,入射杂质离子为C3,能量均一分布&#xff0c;由PIC计算得出 */ #include <math.h> /* 定义离子的结构 */ struct particle {double z;double vx;double vy;double vz;double ener; //单位eVdouble weig; };/* 定义一些常量 */ static const double …

TurtleBot3维护-1.openCR怎么更新/重刷固件

## TOCTurtleBot3维护-1.openCR怎么更新/重刷固件 机器人小车拆下机械臂 机械臂对我们的课题没有用处&#xff0c;又耗电又占地方&#xff0c;就想给它卸掉&#xff0c;但是发现卸掉以后小车不能移动了&#xff0c;蓝牙手柄也不能驱动了&#xff0c;小车也不能正常启动键盘控…

chatgpt赋能Python-python_bz2

Python BZ2&#xff1a;一种高效的数据压缩和解压工具 在计算机科学领域&#xff0c;数据压缩和解压常常是非常有用的工具。它们可以减少磁盘空间占用和网络传输时间。在Python中&#xff0c;有许多优秀的数据压缩/解压库&#xff0c;如gzip、zipfile等。但是&#xff0c;本文…

全网最详细中英文ChatGPT-GPT-4示例文档-从0到1快速入门自然语言智能转换SQL查询语句应用——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

从0到1快速入门自然语言智能转换SQL查询语句应用 Introduce 简介setting 设置Prompt 提示Sample response 回复样本API request 接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例 其它资料下载 ChatGPT是目前最先进的AI聊天机器人&#xff0c;它能够理解…

工业蒸汽量预测

关与作者更多博客请访问云里云外开源社区 工业蒸汽量预测 1 赛题理解 1.1 赛题背景 火力发电的基本原理是&#xff1a;燃料在燃烧时加热水生成蒸汽&#xff0c;蒸汽压力推动汽轮机旋转&#xff0c;然后汽轮机带动发电机旋转&#xff0c;产生电能。在这一系列的能量转化中&am…

网络安全高级攻击

对分类器的高层次攻击可以分为以下三种类型&#xff1a; 对抗性输入&#xff1a;这是专门设计的输入&#xff0c;旨在确保被误分类&#xff0c;以躲避检测。对抗性输入包含专门用来躲避防病毒程序的恶意文档和试图逃避垃圾邮件过滤器的电子邮件。数据中毒攻击&#xff1a;这涉及…

强大的中间人攻击工具(Bettercap)

目录 前言安装常用功能及模块介绍实战应用ARP欺骗DNS欺骗注入脚本替换下载文件 ~~~~~~~~ 因为想要面对一个新的开始&#xff0c;一个人必须有梦想、有希望、有对未来的憧憬。如果没有这些&#xff0c;就不叫新的开始&#xff0c;而叫逃亡。 ​​​​ ~~~~~~~~~~~~~~~~~~~~~~~~…

ChatGPT可能助长攻击者能力,引起IT专家警惕

近期火热的ChatGPT引发各行业的关注&#xff0c;据国外机构黑莓&#xff08;BlackBerry&#xff09;一项针对北美、英国和澳大利亚1500名IT决策者的调查显示&#xff0c;51%的IT专业人士预测&#xff0c;距离ChatGPT成功实现网络攻击只有不到一年的时间&#xff0c;71%的人认为…

【花雕学AI】微软 Bing 图像魔法师:让你的描述变成图像,让你的图像变成现实

你有没有想过&#xff0c;如果你能够用语言来创造图像&#xff0c;那该有多么神奇和有趣&#xff1f;你有没有想过&#xff0c;如果你能够看到你想象中的图像&#xff0c;那该有多么震撼和美妙&#xff1f;现在&#xff0c;这一切都可以实现了&#xff0c;因为微软 Bing 图像魔…

看了几集狂飙,大佬说我变了!今天就来说下我这段时间的感受

大家好&#xff0c;我是晓衡。 前天&#xff0c;晓衡有幸被麒麟子大佬给点名了&#xff01;更确切点&#xff0c;应该是我的一些行为&#xff0c;把麒麟子给惊讶到了。 什么原因呢&#xff1f; 因为这几天&#xff0c;麒麟子正对 Cocos 赛博朋克项目兴奋、着迷&#xff0c;奋笔…

ChatGPT一路狂飙,NVMe SSD能否应对性能挑战?

近日&#xff0c;ChatGPT持续火爆&#xff0c;用户在短短两个月内迅速破亿&#xff0c;大量用户涌入导致ChatGPT访问和数据规模指数级增加。与数月前发布的版本相比&#xff0c;新的ChatGPT“智能”了许多&#xff0c;不仅可以像人类一样聊天交流&#xff0c;甚至能够完成一定程…

Python读写xml(xml,lxml)Edge 浏览器插件 WebTab - 免费ChatGPT

Python读写xml&#xff08;xml&#xff0c;lxml&#xff09;Edge 浏览器插件 WebTab - 免费ChatGPT XML一、xml文件创建方法一&#xff1a;使用xml.dom.minidom1、文件、标签的创建 方法二&#xff1a;使用ElementTree 二、xml文件修改1、修改标签内容&#xff0c;属性2、增加子…

4090显卡上部署 Baichuan-13B-Chat

4090显卡上部署 Baichuan-13B-Chat 0. 背景1. huggingface 地址2. 量化部署使用 Baichuan-13B-Chat3. FastChat 部署使用 Baichuan-13B-Chat3-1. 创建虚拟环境3-2. 克隆代码3-3. 安装依赖库3-4. 使用命令行进行推理3-5. 使用 UI 进行推理3-6. 使用 OpenAI API 方式进行推理3-7.…

清华ChatGLM2-6B开源!第二代性能大幅提升,推理提速42%,最高支持32K上下文

清华ChatGLM2-6B开源&#xff01;第二代性能大幅提升&#xff0c;推理提速42%&#xff0c;最高支持32K上下文 3月份&#xff0c;清华系大模型 ChatGLM-6B 惊喜亮相。 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM) 架构…

Baichuan-13B 介绍及微调

文章目录 Baichuan-13B介绍Baichuan-13B特点Baichuan-13B效果Baichuan-13B模型参数 推理和部署模型下载模型推理 微调和部署下载仓库配置环境微调数据微调过程 Baichuan-13B介绍 2023年7月11日&#xff0c;百川智能发布Baichuan-13B&#xff01; github地址&#xff1a;https:…

【大模型】更强的 LLaMA2 来了,开源可商用、与 ChatGPT 齐平

【大模型】可商用且更强的 LLaMA2 来了 LLaMA2 简介论文GitHubhuggingface模型列表训练数据训练信息模型信息 许可证参考 LLaMA2 简介 2023年7月19日&#xff1a;Meta 发布开源可商用模型 Llama 2。 Llama 2是一个预训练和微调的生成文本模型的集合&#xff0c;其规模从70亿到…

[Unity3D] 协程

目录 前言 学习来源&#xff1a; 一、什么是协程 二、协程的应用举例 三、协程的使用方式 3.1 启动 3.2 结束 3.3 嵌套 3.4 注意 四、Unity脚本的生命周期 五、yield速查表 前言 学习笔记&#xff0c;仅供学习&#xff0c;不做商用&#xff0c;如有侵权&#…