当前位置:AIGC资讯 > 数据采集 > 正文

大数据采集(hdu)第二章笔记

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会记录下消费的数据,当系统出现问题后

可以还原。

2.3.3 Kafka的应用场景 

 总结

更新时间 2023-11-08