2.1大数据采集概述
大数据采集技术就是指对数据进行提取(Extract)、转换(Transform)、加载(Load)操作(即ETL操作),将不同来源的数据整合成为一个新的数据集,为后续的查询和分析处理提供统一的数据视图。
系统日志采集 :
主要用于收集来自公司业务平台、Web应用程序等产生的大量日志数据,并提供给离线和在线的大数据分析系统使用。
• 采用分布式架构,能够满足每秒数百MB的日志数据采集和传输需求。
• 高可用性、高可靠性、可扩展性是日志收集系统所具有的基本特征。
• 目前使用最广泛的、用于系统日志采集的海量数据采集工具有Apache Chukwa、
Apache Flume、Facebook的Scribe和LinkedIn的Kafka等。
网络数据采集:
• 通过网络爬虫或网站公开API等方式从网站上获取数据信息。
• 网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫
(General Purpose Web Crawler)、聚焦网络爬虫(Focused Web Crawler)、
增量式网络爬虫(Incremental Web Crawler)、深层网络爬虫(Deep Web
Crawler)。
感知设备数据采集:
• 通过传感器、摄像头和其他智能终端自动采集信号、图片或录像来获取数据。
• 其关键技术包括针对大数据源的智能识别、感知、适配、传输、接入等
2.2 海量日志采集系统Flume:
1. Flume简介
l 分布式、高可靠和高可用的海量日志采集、聚合和传输系统
l 数据源可定制、可扩展
l 数据存储系统可定制、可扩展
l 中间件:屏蔽了数据源和数据存储系统的异构性
2. Flume的组成
批注:
Source(数据源:负责接收事件,或通过特殊机制将数据封装成事件,并将事件批量放入一个或多个Channel,至少和一个Channel连接)
Sink(数据接收方:负责从Channel中读取事件并传输到下一个Agent或者最终的数据接收方只能从一个Channel中读取事件)
Agent(代理:Flume运行的最小独立单位,一个Agent包含Source,Channel,Sink和其他组件)
Channel(位于Source和Sink之间的缓冲区,用于临时缓存Agent中的事件。)
事件(Event)是Flume传输数据的基本单位。
事件由报头(header)和主体(body)组成。
• 报头的数据结构是map,以key/value的形式保存事件的属性信息和路由信息。报头中不包含事件的内容。
• 事件的主体是一个字节数组,其中包含了真正被传输的数据
补充:
个人认为有点类似Redis中的AOF和RDB
3. Flume的工作流程
source写入过程:
Channel处理器:负责Source的事务处理。
拦截器:根据一定的标准过滤事件。拦截器设置在Source和Source写入数据的Channel之间
Channel选择器:基于预设的标准,决定Source接收的事件应该写入哪些Channel
Sink读取过程:
Sink 组在读取事件时会启动一个事务,当Channel 中的批量事件被成功读取并写入存储系统或下一个Agent 后,该事务才可以被提交,此时Channel 中的事件也会被标记为删除,且不能被其他Sink 再次使用;若出错或失败,则回滚该事务至Channel。
4. Flume的数据流模型
概念:在Flume 中,数据流是指一个或多个Agent 用来将数据推送到另一个Agent,并最终推送到存储或索引系统的过程。
小tip:多个Agent可以串行传输数据流模型,但是Sink和Source的类型必须相同(串行传输数据流模型)
小tip:多Agent汇聚数据流模型(多个sink连一个source)单Agent多路传输数据流模型(一个source连多个channel)
2.3 分布式发布订阅消息系统Kafka
1. Kafka简介
Kafka是由Java和Scala编写的一个高吞吐量、分布式的发布-订阅消息系统。
2. Kafka的架构
消息:消息是Kafka通信的基本单位。由一个固定长度的消息头和一个可变长度的消息体组成。
批次:批次是一组属于同一个主题和分区的消息的集合。
小tip:分批次传输减少网络开销。批次内的消息越多,单个消息的传输时间就越长。
主题:同一类消息可被抽象归纳为一个主题。
分区:每个主题包含一个或多个分区。
小tip:分区是物理上的概念,每个分区对应一个文件夹 。一个分区内部的消息是有序的,分区间的消息是无序的。消息以追加的方式写入分区尾部,以先入先出的顺序被消费。
小tip:消息在分区中的编号被称为偏移量。
生产者负责创建消息
• 生产者可以发布数据到指定的主题,并可以指定消息写入哪个分区
• 生产者直接把消息发送给对应分区的broker,而不需要任何路由层
消费者可以订阅一个或多个主题, 并按照消息生成的顺序以拉取(Pull)模式读取消息。
• 每个消费者一般都属于一个特定的消费者组
• 在同一个消费者组中,每个消费者消费不同的分区的消息
• 属于不同消费者组的消费者可以消费同一个分区的消息
副本机制:经典的leader和follower(一主多从)
小tip:Kafka以分区为单位进行副本备份,副本分布在不同的代理(broker)上
Kafka的消息持久化 :(追加方式,顺序读写)先写入操作系统的页缓存(cache),由操作系统决定何时把缓存中的数据写入磁盘,实现批量读写
ZooKeeper:
当生产者将消息发送到Kafka后,就会立刻通知ZooKeeper,当ZooKeeper监测到
相关的数据变化后,会通知消费者去消费消息。
• 消费者主动去Pull(拉)kafka中的消息,这样可以降低Broker的压力。
• 当消费者消费了一条消息后,ZooKeeper会记录下消费的数据,当系统出现问题后
可以还原。