一、背景描述
目前后端数据引擎系统中 使用了24个节点的 Elasticsearch 集群,存储每天采集1.7亿条上下的数据量,具体的网页原始数据存储在 Cassandra 集群中。一个月下来抓取的数据量超过2T,同时要保证每天450台爬虫机器同时抓取数据稳定运行,这么大的数据采集量当然需要一个可靠的爬虫系统。在这个爬虫系统中抓取任务和数据处理分发的稳定中间件必不可少。在多种MQ消息中间件里面,我们经过反复的试验和论证,最后选择了Kafka和rabbitMQ两种消息中间件,在分布式爬虫系统作为不同的用途使用,rabbitMQ做爬虫抓取压力分载,Kafka并行对一条数据多种状态处理。
备注:将来还会用一篇文章来阐述为什么我们要放弃使用MongoDB 转向 Cassandra。
二、rabbitMQ使用场景
rabbitMQ在系统与分布式爬虫配合,首先从redis种子仓库里将有效的URL地址提取出来,将URL种子地址和爬虫采集模板匹配组装成rabbitMQ消息,通过消息发送端给rabbitMQ消息中间件,450个爬虫worker节点作为rabbitMQ消息接收端去不同的网站对数据进行采集数据。

三、Kafka使用场景
Kafka在系统扮演者并行数据处理的工作,例如:数据清洗、数据标记、情感分析、数据删除 等多个数据处理过程,中间有同步处理的数据,也是异步的处理数据流程,最终再将处理完成的数据组装起来,将摘要检索字段存储在 Elasticsearch中,原始网页存储在 Cassandra。

本文介绍了在一个拥有24节点Elasticsearch集群和Cassandra存储的大规模数据采集系统中,如何利用rabbitMQ和Kafka作为消息中间件来稳定运行450台爬虫机器。rabbitMQ用于压力分载,从redis获取URL种子进行数据采集;Kafka则用于并行数据处理,如数据清洗、标记等,处理后的数据存储在Elasticsearch和Cassandra。未来还将分享为何放弃MongoDB转而使用Cassandra的原因。
最低0.47元/天 解锁文章
255

被折叠的 条评论
为什么被折叠?



