前言

互联网的快速发展促进了许多新媒体的发展,无论是知名大v、明星还是勤奋的鸡翅,都可以在手机上发布微博、朋友圈、评论网站上发布状态,分享自己的想法。 无论是热门新闻还是娱乐八卦,传播速度都远远超出了我们的想象。 短短几分钟内,就可以转发数万件,阅读数百万件。 如此庞大的信息爆炸性地传播,如何实时掌握民情,应对,对很多企业来说很重要。 大数据时代,除媒体信息外,商品在各种EC平台的订单量、用户的购买评论也对后续消费者产生了巨大的影响。 商家的产品设计师需要汇总分析各种平台的数据,作为依据,决定之后的产品发展,公司的公关市场部门也需要根据舆论进行适当及时的处理,但这一切都是传统的舆论系统转向大数据舆论收集分析系统

分析完舆论状况后,我们将具体细化看大数据舆论系统,对我们的数据存储和计算系统提出什么样的需求?

大量原始数据的实时入库:要实现一系列舆论系统,需要上游再生输出的收集,即爬虫系统。 爬虫需要收集各种门户、媒体的网络内容。 抓住前需要加重,抓住后需要分析提取。 例如,需要抓住子页面。 处理原始网络数据:无论是主要门户还是来自媒体的网络数据,在捕获后,我们都需要进行一定的数据提取。 将原始网络内容转换为结构化数据,如文章标题、摘要等,如果是商品评价类的信息,则需要提取有效的评价。 结构化数据舆情分析:各类原始输出成为结构化数据后,实时计算产品需要对各类输出进行合理分类,并对分类的内容进一步进行情感标注。 根据业务需求,这里可能会产生各种各样的输出,如品牌当前是否有热门话题、舆论影响力分析、直播路径分析、参与用户统计和图像、舆论情绪分析或严重警告等。 舆论分析系统的中间和结果数据的保存,交互式分析查询:从网页的原始数据清洗到最终的舆论报告,会产生很多种类的数据。 这些数据中,有的提供给数据分析同学进行舆论分析系统的调谐,有的提供给业务部门根据舆论结果进行决策。 这些查询可能需要灵活且具有全文搜索、多字段组合的灵活交互式分析功能的存储系统。 重大舆论事件实时预警:对于舆论结果,除了常规检索和展示的需要外,在发生重大事件时还需要实时预警。 我们计划分两部分介绍完整的舆论新框架,一是主要提供框架设计,首先介绍目前主流的大数据计算框架,分析一些优缺点,引入舆论大数据框架。 第2篇有完整的数据库表设计和示例代码的一部分。 敬请期待。

系统设计

需求分析

结合开头的舆论系统说明,大容量大数据舆论分析系统的流程图大致如下。

系统架构简介(整体架构和系统架构的区别-编程之家

图1舆论系统业务流程

原始web存储库。 必须能够处理大量的数据、低成本和低延迟写入。 写入网页数据后进行实时结构化提取,提取的数据进行降噪、分词、图像ocr处理等。 对分词文本、图片进行情感识别,生成舆论数据结果集。 传统的离线总量计算难以满足舆论系统的时效性需求。 计算引擎在处理数据时,可能还需要从存储库中获取用户信息、情感词元数据信息等元数据。 不仅是实时计算链接,还要对存量数据定期进行聚类,优化我们的情感词识别库,或者在上游根据业务需要触发情感处理规则的更新,基于新的情感标记库进行存量数据的更新舆论结果数据集有各种各样的使用需求。 对重大舆论,需要实时警告。 完整的舆论结果数据展示层支持全文检索,需要灵活的属性字段组合查询。 可以根据业务上、属性字段的可信度、舆论时间或关键字的组合进行分析。 前面介绍过,舆论大数据分析系统需要两种计算,一种是实时计算包括海量网络内容的实时提取、情感词分析、网络舆论结果的存储。 另一种是离线计算,系统需要追溯历史数据,结合人工标注等方式优化情感词典,以纠正一些实时计算的结果。 因此,在系统设计中,必须选择既能进行实时计算又能进行批量离线计算的系统。 在开源大数据解决方案中,Lambda体系结构正好可以满足这些需求。 下面介绍Lambda的体系结构。

Lambda体系结构(维基)

系统架构简介(整体架构和系统架构的区别-编程之家

图2 Lambda体系结构图

Lambda架构可以说是Hadoop、Spark系统中最受欢迎的大数据架构。 该体系结构的最大优点是支持海量数据的批量计算,即离线和流实时处理,即热数据处理。

具体怎么实现呢,首先,上游一般是kafka这样的队列服务,实时保存数据的写入。 kafka队列有两个订阅者。 一个人是照片上半部分的总量数据,总量数据保存在HDFS之类的存储介质中。 当发生离线计算任务时,计算资源(如Hadoop )会访问存储系统上的全部数据,并执行全部批量计算的处理逻辑。 经过map/reduce会话后的结果将写入Hbase等结构化存储引擎,提供给商业方面的咨询。 队列的另一个消费订阅者是流媒体计算引擎,流媒体计算引擎在很多情况下是

会实时的消费队列中的数据进行计算处理,例如Spark Streaming实时订阅Kafka的数据,流计算结果也会写入一个结构化数据引擎。批量计算和流计算的结果写入的结构化存储引擎即上图标注3的”Serving Layer”,这一层主要提供结果数据的展示和查询。

在这套架构中,批量计算的特点是需要支持处理海量的数据,并根据业务的需求,关联一些其他业务指标进行计算。批量计算的好处是计算逻辑可以根据业务需求灵活调整,同时计算结果可以反复重算,同样的计算逻辑多次计算结果不会改变。批量计算的缺点是计算周期相对较长,很难满足实时出结果的需求,所以随着大数据计算的演进,提出了实时计算的需求。实时计算在Lambda架构中是通过实时数据流来实现,相比批处理,数据增量流的处理方式决定了数据往往是最近新产生的数据,也就是热数据。正因为热数据这一特点,流计算可以满足业务对计算的低延时需求,例如在舆情分析系统中,我们往往希望舆情信息可以在网页抓取下来后,分钟级别拿到计算结果,给业务方充足的时间进行舆情反馈。下面我们就来具体看一下,基于Lambda架构的思想如何实现一套完整的舆情大数据架构。

开源舆情大数据方案

通过这个流程图,让我们了解了整个舆情系统的建设过程中,需要经过不同的存储和计算系统。对数据的组织和查询有不同的需求。在业界基于开源的大数据系统并结合Lambda架构,整套系统可以设计如下:

系统架构简介(整体架构和系统架构的区别-编程之家

图3 开源舆情架构图

系统的最上游是分布式的爬虫引擎,根据抓取任务抓取订阅的网页原文内容。爬虫会把抓取到的网页内容实时写入Kafka队列,进入Kafka队列的数据根据前面描述的计算需求,会实时流入流计算引擎(例如Spark或者Flink),也会持久化存储在Hbase,进行全量数据的存储。全量网页的存储可以满足网页爬取去重,批量离线计算的需求。流计算会对原始网页进行结构化提取,将非结构化网页内容转化为结构数据并进行分词,例如提取出网页的标题,作者,摘要等,对正文和摘要内容进行分词。提取和分词结果会写回Hbase。结构化提取和分词后,流计算引擎会结合情感词库进行网页情感分析,判断是否有舆情产生。流计算引擎分析的舆情结果存储Mysql或者Hbase数据库中,为了方便结果集的搜索查看,需要把数据同步到一个搜索引擎例如Elasticsearch,方便进行属性字段的组合查询。如果是重大的舆情时间,需要写入Kafka队列触发舆情报警。全量的结构化数据会定期通过Spark系统进行离线计算,更新情感词库或者接受新的计算策略重新计算历史数据修正实时计算的结果。

开源架构分析

上面的舆情大数据架构,通过Kafka对接流计算,Hbase对接批计算来实现Lambda架构中的“batch view”和“real-time view”,整套架构还是比较清晰的,可以很好的满足在线和离线两类计算需求。但是把这一套系统应用在生产并不是一件容易的事情,主要有下面一些原因。

整套架构涉及到非常多的存储和计算系统包括:Kafka,Hbase,Spark,Flink,Elasticsearch。数据会在不同的存储和计算系统中流动,运维好整套架构中的每一个开源产品都是一个很大的挑战。任何一个产品或者是产品间的通道出现故障,对整个舆情分析结果的时效性都会产生影响。为了实现批计算和流计算,原始的网页需要分别存储在Kafka和Hbase中,离线计算是消费hbase中的数据,流计算消费Kafka的数据,这样会带来存储资源的冗余,同时也导致需要维护两套计算逻辑,计算代码开发和维护成本也会上升。舆情的计算结果存储在Mysql或者Hbase,为了丰富组合查询语句,需要把数据同步构建到Elasticsearch中。查询的时候可能需要组合Mysql和Elasticsearch的查询结果。这里没有跳过数据库,直接把结果数据写入Elasticsearch这类搜索系统,是因为搜索系统的数据实时写入能力和数据可靠性不如数据库,业界通常是把数据库和搜索系统整合,整合下的系统兼备了数据库和搜索系统的优势,但是两个引擎之间数据的同步和跨系统查询对运维和开发带来很多额外的成本。

新的大数据架构Lambda plus

通过前面的分析,相信大家都会有一个疑问,有没有简化的的大数据架构,在可以满足Lambda对计算需求的假设,又能减少存储计算以及模块的个数呢。Linkedin的Jay Kreps提出了Kappa架构,关于Lambda和Kappa的对比可以参考”云上大数据方案”这篇,这里不展开详细对比,简单说下,Kappa为了简化两份存储,取消了全量的数据存储库,通过在Kafka保留更长日志,当有回溯重新计算需求到来时,重新从队列的头部开始订阅数据,再一次用流的方式处理Kafka队列中保存的所有数据。这样设计的好处是解决了需要维护两份存储和两套计算逻辑的痛点,美中不足的地方是队列可以保留的历史数据毕竟有限,难以做到无时间限制的回溯。分析到这里,我们沿着Kappa针对Lambda的改进思路,向前多思考一些:假如有一个存储引擎,既满足数据库可以高效的写入和随机查询,又能像队列服务,满足先进先出,是不是就可以把Lambda和Kappa架构揉合在一起,打造一个Lambda plus架构呢?

新架构在Lambda的基础上可以提升以下几点:

在支持流计算和批计算的同时,让计算逻辑可以复用,实现“一套代码两类需求”。统一历史数据全量和在线实时增量数据的存储,实现“一份存储两类计算”。为了方便舆情结果查询需求,“batch view”和“real-time view”存储在既可以支持高吞吐的实时写入,也可以支持多字段组合搜索和全文检索。

总结起来就是整套新架构的核心是解决存储的问题,以及如何灵活的对接计算。我们希望整套方案是类似下面的架构:

系统架构简介(整体架构和系统架构的区别-编程之家

图4 Lambda Plus架构

数据流实时写入一个分布式的数据库,借助于数据库查询能力,全量数据可以轻松的对接批量计算系统进行离线处理。数据库通过数据库日志接口,支持增量读取,实现对接流计算引擎进行实时计算。批计算和流计算的结果写回分布式数据库,分布式数据库提供丰富的查询语意,实现计算结果的交互式查询。

整套架构中,存储层面通过结合数据库主表数据和数据库日志来取代大数据架构中的队列服务,计算系统选取天然支持批和流的计算引擎例如Flink或者Spark。这样一来,我们既可以像Lambda进行无限制的历史数据回溯,又可以像Kappa架构一样一套逻辑,存储处理两类计算任务。这样的一套架构我们取名为“Lambda plus”,下面就详细展开如何在阿里云上打造这样的一套大数据架构。

云上舆情系统架构

在阿里云众多存储和计算产品中,贴合上述大数据架构的需求,我们选用两款产品来实现整套舆情大数据系统。存储层面使用阿里云自研的分布式多模型数据库Tablestore,计算层选用Blink来实现流批一体计算。

系统架构简介(整体架构和系统架构的区别-编程之家

图5 云上舆情大数据架构

这套架构在存储层面,全部基于Tablestore,一个数据库解决不同存储需求,根据之前舆情系统的介绍,网页爬虫数据在系统流动中会有四个阶段分别是原始网页内容,网页结构化数据,分析规则元数据和舆情结果,舆情结果索引。我们利用Tablestore宽行和schema free的特性,合并原始网页和网页结构化数据成一张网页数据。网页数据表和计算系统通过Tablestore新功能通道服务进行对接。通道服务基于数据库日志,数据的组织结构按照数据的写入顺序进行存储,正是这一特性,赋能数据库具备了队列流式消费能力。使得存储引擎既可以具备数据库的随机访问,也可以具备队列的按照写入顺序访问,这也就满足我们上面提到整合Lambda和kappa架构的需求。分析规则元数据表由分析规则,情感词库组层,对应实时计算中的维表。

计算系统这里选用阿里云实时流计算产品Blink,Blink是一款支持流计算和批计算一体的实时计算产品。并且类似Tablestore可以很容易的做到分布式水平扩展,让计算资源随着业务数据增长弹性扩容。使用Tablestore + Blink的优势有以下几点:

Tablestore已经深度和Blink进行整合,支持源表,维表和目的表,业务无需为数据流动开发代码。整套架构大幅降低组建个数,从开源产品的6~7个组建减少到2个,Tablestore和Blink都是全托管0运维的产品,并且都能做到很好的水平弹性,业务峰值扩展无压力,使得大数据架构的运维成本大幅降低。业务方只需要关注数据的处理部分逻辑,和Tablestore的交互逻辑都已经集成在Blink中。开源方案中,如果数据库源希望对接实时计算,还需要双写一个队列,让流计算引擎消费队列中的数据。我们的架构中数据库既作为数据表,又是队列通道可以实时增量数据消费。大大简化了架构的开发和使用成本。流批一体,在舆情系统中实时性是至关重要的,所以我们需要一个实时计算引擎,而Blink除了实时计算以外,也支持批处理Tablestore的数据, 在业务低峰期,往往也需要批量处理一些数据并作为反馈结果写回Tablestore,例如情感分析反馈等。那么一套架构既可以支持流处理又可以支持批处理是再好不过。这里我们可以参考之前的一篇文章《实时计算最佳实践:基于表格存储和Blink的大数据实时计算 https://yq.aliyun.com/articles/692526》。一套架构带来的优势是,一套分析代码既可以做实时流计算又可以离线批处理。

整个计算流程会产生实时的舆情计算结果。重大舆情事件的预警,通过Tablestore和函数计算触发器对接来实现。Tablestore和函数计算做了增量数据的无缝对接,通过结果表写入事件,可以轻松的通过函数计算触发短信或者邮件通知。完整的舆情分析结果和展示搜索利用了Tablestore的新功能多元索引,彻底解决了开源Hbase+Solr多引擎的痛点:

运维复杂,需要有运维hbase和solr两套系统的能力,同时还需要维护数据同步的链路。Solr数据一致性不如Hbase,在Hbase和Solr数据语意并不是完全一致,加上Solr/Elasticsearch在数据一致性很难做到像数据库那么严格。在一些极端情况下会出现数据不一致的问题,开源方案也很难做到跨系统的一致性比对。查询接口需要维护两套API,需要同时使用Hbase client和Solr client,索引中没有的字段需要主动反查Hbase,易用性较差。

参考文献

1.Lambda大数据架构

https://mapr.com/tech-briefs/stream-processing-mapr/

2.Kappa大数据架构

https://www.oreilly.com/ideas/questioning-the-lambda-architecture

3.Lambda和Kappa架构对比

https://www.ericsson.com/en/blog/2015/11/data-processing-architectures–lambda-and-kappa

总结

本文基于《百亿级全网舆情分析系统存储设计 https://yq.aliyun.com/articles/265024》并结合Tablestore的新功能做了现代大数据舆情系统的架构升级,实现了海量信息下的实时舆情分析存储系统。也介绍了开源方案,并和我们的方案做了详细的对比。

作者:dty

原文链接:https://yq.aliyun.com/articles/704171?utm_content=g_1000060603

加导师QQ一天赚500为了方便舆情结果查询需求,“batch view”和“real-time view”存储在既可以支持高吞吐的实时写入,也可以支持多字段组合搜索和全文检索。

总结起来就是整套新架构的核心是解决存储的问题,以及如何灵活的对接计算。我们希望整套方案是类似下面的架构:

系统架构简介(整体架构和系统架构的区别-编程之家

图4 Lambda Plus架构

数据流实时写入一个分布式的数据库,借助于数据库查询能力,全量数据可以轻松的对接批量计算系统进行离线处理。数据库通过数据库日志接口,支持增量读取,实现对接流计算引擎进行实时计算。批计算和流计算的结果写回分布式数据库,分布式数据库提供丰富的查询语意,实现计算结果的交互式查询。

整套架构中,存储层面通过结合数据库主表数据和数据库日志来取代大数据架构中的队列服务,计算系统选取天然支持批和流的计算引擎例如Flink或者Spark。这样一来,我们既可以像Lambda进行无限制的历史数据回溯,又可以像Kappa架构一样一套逻辑,存储处理两类计算任务。这样的一套架构我们取名为“Lambda plus”,下面就详细展开如何在阿里云上打造这样的一套大数据架构。

云上舆情系统架构

在阿里云众多存储和计算产品中,贴合上述大数据架构的需求,我们选用两款产品来实现整套舆情大数据系统。存储层面使用阿里云自研的分布式多模型数据库Tablestore,计算层选用Blink来实现流批一体计算。

系统架构简介(整体架构和系统架构的区别-编程之家

图5 云上舆情大数据架构

这套架构在存储层面,全部基于Tablestore,一个数据库解决不同存储需求,根据之前舆情系统的介绍,网页爬虫数据在系统流动中会有四个阶段分别是原始网页内容,网页结构化数据,分析规则元数据和舆情结果,舆情结果索引。我们利用Tablestore宽行和schema free的特性,合并原始网页和网页结构化数据成一张网页数据。网页数据表和计算系统通过Tablestore新功能通道服务进行对接。通道服务基于数据库日志,数据的组织结构按照数据的写入顺序进行存储,正是这一特性,赋能数据库具备了队列流式消费能力。使得存储引擎既可以具备数据库的随机访问,也可以具备队列的按照写入顺序访问,这也就满足我们上面提到整合Lambda和kappa架构的需求。分析规则元数据表由分析规则,情感词库组层,对应实时计算中的维表。

计算系统这里选用阿里云实时流计算产品Blink,Blink是一款支持流计算和批计算一体的实时计算产品。并且类似Tablestore可以很容易的做到分布式水平扩展,让计算资源随着业务数据增长弹性扩容。使用Tablestore + Blink的优势有以下几点:

Tablestore已经深度和Blink进行整合,支持源表,维表和目的表,业务无需为数据流动开发代码。整套架构大幅降低组建个数,从开源产品的6~7个组建减少到2个,Tablestore和Blink都是全托管0运维的产品,并且都能做到很好的水平弹性,业务峰值扩展无压力,使得大数据架构的运维成本大幅降低。业务方只需要关注数据的处理部分逻辑,和Tablestore的交互逻辑都已经集成在Blink中。开源方案中,如果数据库源希望对接实时计算,还需要双写一个队列,让流计算引擎消费队列中的数据。我们的架构中数据库既作为数据表,又是队列通道可以实时增量数据消费。大大简化了架构的开发和使用成本。流批一体,在舆情系统中实时性是至关重要的,所以我们需要一个实时计算引擎,而Blink除了实时计算以外,也支持批处理Tablestore的数据, 在业务低峰期,往往也需要批量处理一些数据并作为反馈结果写回Tablestore,例如情感分析反馈等。那么一套架构既可以支持流处理又可以支持批处理是再好不过。这里我们可以参考之前的一篇文章《实时计算最佳实践:基于表格存储和Blink的大数据实时计算 https://yq.aliyun.com/articles/692526》。一套架构带来的优势是,一套分析代码既可以做实时流计算又可以离线批处理。

整个计算流程会产生实时的舆情计算结果。重大舆情事件的预警,通过Tablestore和函数计算触发器对接来实现。Tablestore和函数计算做了增量数据的无缝对接,通过结果表写入事件,可以轻松的通过函数计算触发短信或者邮件通知。完整的舆情分析结果和展示搜索利用了Tablestore的新功能多元索引,彻底解决了开源Hbase+Solr多引擎的痛点:

运维复杂,需要有运维hbase和solr两套系统的能力,同时还需要维护数据同步的链路。Solr数据一致性不如Hbase,在Hbase和Solr数据语意并不是完全一致,加上Solr/Elasticsearch在数据一致性很难做到像数据库那么严格。在一些极端情况下会出现数据不一致的问题,开源方案也很难做到跨系统的一致性比对。查询接口需要维护两套API,需要同时使用Hbase client和Solr client,索引中没有的字段需要主动反查Hbase,易用性较差。

参考文献

1.Lambda大数据架构

https://mapr.com/tech-briefs/stream-processing-mapr/

2.Kappa大数据架构

https://www.oreilly.com/ideas/questioning-the-lambda-architecture

3.Lambda和Kappa架构对比

https://www.ericsson.com/en/blog/2015/11/data-processing-architectures–lambda-and-kappa

总结

本文基于《百亿级全网舆情分析系统存储设计 https://yq.aliyun.com/articles/265024》并结合Tablestore的新功能做了现代大数据舆情系统的架构升级,实现了海量信息下的实时舆情分析存储系统。也介绍了开源方案,并和我们的方案做了详细的对比。

作者:dty

原文链接:https://yq.aliyun.com/articles/704171?utm_content=g_1000060603