易观 > 技术专区 >

大数据混合云的四分卫 ——易观开源大数据互联网百亿级记录互传Backquarter项目

大数据混合云的四分卫 ——易观开源大数据互联网百亿级记录互传Backquarter项目

2017-04-13 来源:易观

Backquarter项目刚刚开源,并会不断优化完善,感兴趣的小伙伴可以一起交流。

四分位,是橄榄球攻方部队里的少尉,四分卫给出明确口令时,球会被递到四分卫手中, 于此同时一场功防开始展开。因为通常情况下球都是由四分位传出, 所以四分卫必须拥有很好的传球技术,同时四分卫又必须拥有较快的速度,以便在将球传出之前躲避对方防守队员(在球传出前,对方的防守队员的目标只有一个人——四分卫)

大数据混合云当中,需要公有云和私有云之间有百亿、千亿级别的数据要同步,如何通过互联网/专用网将如此多的数据迅速、安全、无遗漏的传递,是大数据混合云面临的首要问题,易观大数据混合云四分卫项目应运而生。现在易观的Backquarter项目是易观混合云的核心组件,负责易观从公有云向易观私有云传递每日4000万日活的用户、接近200亿条的用户行为流水,作为易观混合云的核心组件已经稳定运行一年有余。在最初的时候,易观也用过KafkaMirrorMaker项目,但是发现由于没有压缩,互联网小包效率过低等都未成功使用。现在易观将这个久经考验的Backquarter项目开源给所有使用大数据混合云的开发者们,希望各位大数据的开发者可以利用好大数据混合云。

注:现在易观大数据混合云,支持易观每日超过200亿条的用户行为记录,SDK4.42亿月活,大数据混合云集群现在5.8Pb数据存储,并支持ad-hoc,实时计算等核心功能,为易观千帆、万象、方舟等产品提供坚实的运算基础。

——易观CTO 郭炜

随着易观业务的发展,数据量也由小变大,由几亿到几十亿、几百亿。在混合云体系中,数据最先流入公有云的Kafka集群,而计算需要在私有云环境进行,所以需要把数据从公有云同步下传至私有云的集群中。在数据量小,消息体不大的情况下,通过MirrorMaker还可以满足。但随着数据量的猛增,MirrorMaker就显得力不从心了。由于单条消息体比较小,而数据量巨大,实时下传过程中,网络上都是小包的传输,带宽利用率低,很难满足我们的需求。所以需要一种能最大化利用带宽的下传机制来满足每天亿级别的消息的传递。Backquarter项目就是在这种背景下出现的,就是为了解决小包传输效率低,保证每天的上T的数据能够完整准时的下传至私有云,保证下游计算能准时计算汇总指标,不至于因为数据传不下来而延迟。

Backquarter项目也经过了几个版本的迭代,目前运行比较稳定,每天处理易观亿级别的原始数据,压缩完后每天上T的数据就是通过Backquarter来完成的。整体架构如下:

 

Backquarter项目的整体思路如下:

1.  启动N个消费者来实时消费公有云上的集群消息,同时在本地落地生成文件。文件的大小根据不同的队列上的业务消息数量来决定,默认大小为500M

2.  当生成的文件达到设定值后进行压缩,然后放到待下传的目录等待处理。

3.  下传服务实时监控下传目录,有文件生成立即下传至私有云的接收目录。

4.  私有云上的接收服务监控接收目录,发现文件传输完毕则对文件进行解压,然后移至待消费的目录。

5.  若干个消费者程序监控待消费目录,有文件生成则立即对文件进行消费,发送至私有云的消息集群中。

Backquarter项目由Java语言编写,辅助以一些Python脚本和Shell脚本。其中的生产者和消费者由Java来实现,生产者实时监听队列,有消息到达则通过Log4j来写文件,文件内容进行加密,文件大小通过Log4j的配置文件来进行设置。文件的压缩和传输通过Python脚本来实现。为平衡压缩和解压的速度,采用Snappy压缩方式。数据传输通过专线,SCP传输,为简化传输过程和保证传输准确,传输过程以文件大小来判断文件是否传输完毕。在整个项目中,对于一些进度或异常的监控通过Shell脚本和Python脚本来实现,有异常会附以微信或邮件通知,确保服务的持续性和下传的完整性、准确性。

Backquarter项目经过了几个版本的迭代,效率也在不断的优化,从最初的依赖MySql数据库到目前的分目录处理,效率也在不断提升。当然,随着易观业务的持续增长,数据量也在飞速增长,所以需要不断提升效率来适应数据的持续增长,可以从以下方面来提升:

1.  消费者可以水平扩展,把消费压力分散到不同机器。

2.  数据传输策略调整,目前为主备模式,可以升级为负载均衡模式。

3.  生产者可以继续优化,根据数据量启动多个生产者同时处理多个文件。采用异步模式,优化设置缓存的消息数量,达到发送效率最优。

Backquarter项目已经开源,Github地址为:https://github.com/analysys/Backquarter.git

项目为Maven项目,下载下来后直接编译打包即可运行。

目录结构及说明(详见Github README.md)

src/java: 程序源码

src/resources: 配置文件(conf.properties 中可以配置KafkaZookeeper地址)

script: 脚本文件

Consumer.java: 消费者

ProducerFromFile.java: 生产者

Backquarter项目刚刚开源,并会不断优化完善,感兴趣的小伙伴可以一起交流。

易观社群

相关文章