数据采集解决的主要问题是与各类外部数据源进行对接(集成),然后抽取数据并将其传输给后续组件处理,该过程不对数据进行任何处理,只单纯“采集”。
一、技术堆栈与选型可供选择的工具较多,且每一种工具都提供多种插件来对接不同的数据源与协议,主流的数据采集工具如下:
1、FlumeFlume:分布式、可靠的数据采集工具,可有效收集、聚合及传送大量的事件流数据。Flume内部有三大组件:Source、Channel和Sink,Source和Sink是面向不同数据源和外部协议的入口和出口,负责对接输入和输出的协议与格式,并适配成Flume内部的统一格式。当一个Source接收到一个Event,它会被存储在一个或多个Channel里,Channel是一种被动的存储方式,它会保存这个Event直到它被一个或多个Sink消费掉。
Flume的Agent可组合使用,形成一些实用的拓扑结构以解决采集阶段的典型问题,如日志的Consolidation和多路传输。
2、Logstash在大数据领域有一个轻量的技术堆栈组合:ELK-Elasticsearch、Logstash和Kibana,其中Elasticsearch负责存储和分析,Kibana负责数据展示,而Logstash则专注于数据采集。Logstash提供了丰富的输入和输出插件来对接不同的数据源和协议,同时它的Filter机制可以在数据采集过程中嵌入很多处理逻辑。
3、Kafka ConnectKafka是目前大数据平台不可或缺的消息队列组件,Kafka Connect专注于将外部数据写入Kafka或将Kafka数据输出到外部数据源。
4、CamelCamel是一个基于规则的消息路由引擎,是为企业应用集成而设计的一套成俗而强大的工具,也被成为EBS(企业服务总线)使用,它的作用是在应用系统林立的企业IT环境中扮演“万向接头”的角色,让数据和消息在各种不同的系统间平滑流转和交换。Camel已支持近200种协议或数据源,且能完全基于配置来定义路由规则。
二、基于Sqoop的批量导入 1、使用SqoopSqoop的工作原理是从数据库获取被导出数据的元数据后,生成只含有Map的MR作业,每个Map读取一定区间内的数据,并行地完成数据的导入和导出工作。
2、增量导入与全量导入- 增量导入的好处是数据量小,能快速完成采集和处理作业,但集采较麻烦,容易出差错,且后续再数仓中处理逻辑比较复杂,因为需要将增量数据“merge”到数仓中的全量表。
- 全量导入好处是简单、可靠,后续数据处理比较容易,但代价很大,每次全量导入对目标数据源造成的压力、对贷款资源的挤占及在大数据平台上消耗的存储和计算资源都会超过增量导入。
实时数据采集具有更加重要的地位:
- 它对于实时处理时不可或缺的
- 实时采集的数据同样可传输给批处理,这样就不需要再进行批量导入了
当在数据库中生成数据时主动将数据推送到手机端,要做到这一点只能在数据库层面实现,一般有两种方案:
- 使用数据库触发器和存储过程
- 使用特定数据库产品的日志同步机制
如果系统对实时性要求不是很高,达到近似实时即可,可使用“Pull”模式,以比较密集的周期在数据库上主动抓取数据。



