大数据架构之端到端方案综述(1)数据采集

序言:为便于初学者,对大数据的端到端架构有一个整体认知。我站在售前解决方案角度,整理和汇总了从数据采集、数据分析、数据存储再到数据治理等多方面内容。希望大家在读完本篇内容之后,可以有所学,有所得。(注:本文主要面向解决方案层面,对R&D同学的帮助可能不是很大)

1. 数据采集传输方式汇总
Flume,非关系型数据的收集(与Fluentd类似),日志等信息收集
Logstash,Elasticsearch 、Kibana 结合使用,ELK框架
Scribe,Facebook开源的日志收集系统
Chukwa,Hadoop系列,使用比较少
Kafka,数据的传输和缓存工具
Sqoop,Apache开源,关系型数据收集,异构环境数据交换,关系型数据库全量&增量同步工具
Datax,阿里开源,关系型数据采集同步工具,离线环境中
Kettle,国外开源的ETL工具,数据集成同步工具
上述各方式的使用频次,Flume、Sqoop和Kafka最高,Logstash次之,其他相对要少很多。

2. Flume介绍
2.1 Flume简介
Flume是一个分布式、可靠、高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据,并写到HDFS、Hbase等。Flume的数据流由事件(Event)贯穿始终,事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。

2.2 Flume架构
Client:生产数据,运行在一个独立的线程。Event: 一个数据单元,消息头和消息体组成。Flow: Event从源点到达目的点的迁移的抽象。

Agent: 一个独立的Flume进程,包含组件Source、 Channel、 Sink。(Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。)Source: 数据收集组件。(source从Client收集数据,传递给Channel)Channel: 中转Event的一个临时存储,保存由Source组件传递过来的Event。(Channel连接 sources 和 sinks ,这个有点像一个队列。)Sink: 从Channel中读取并移除Event, 将Event传递到FlowPipeline中的下一个Agent(如果有的话)(Sink从Channel收集数据,运行在一个独立线程。)

Flume 核心是 Agent,Flume以agent为最小的独立运行单位,一个agent就是一个JVM,它是一个完整的数据收集工具,含有三个核心组件,分别是 source、 channel、 sink,通过这些组件, Event 可以从一个地方流向另一个地方

 

Source是数据的收集端,负责将数据捕获后进行特殊的格式化,将数据封装到事件(event) 里,然后将事件推入Channel中。 Flume提供了很多内置的Source, 支持 Avro, log4j, syslog 和 http post(body为json格式),可以让应用程序同已有的Source直接打交道,如AvroSource。SyslogTcpSource。 如果内置的Source无法满足需要, Flume还支持自定义Source。

Channel是连接Source和Sink的组件,可以将它看做一个数据的缓冲区(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上, 直到Sink处理完该事件。介绍两个较为常用的Channel, MemoryChannel(Event数据存储在内存种)和FileChannel(Event数据存储在磁盘文件中)。

Sink从Channel中取出事件,然后将数据发到别处,可以向文件系统、数据库、 Hbase、ES和hadoop存数据, 也可以是其他agent的Source。在日志数据较少时,可以将数据存储在文件系统中,并且设定一定的时间间隔保存数据。

2.3 Flume使用场景
多个Agent顺序连接
多个Agent的数据汇聚到同一个Agent,这种情况应用场景比较多,比如要收集Web网站的用户行为日志, Web网站为了可用性使用的负载集群模式,每个节点都产生用户行为日志,可以为每个节点都配置一个Agent来单独收集日志数据,然后多个Agent将数据最终汇聚到一个用来存储数据存储系统,如HDFS上。
多级流,Source、Channel和Sink的混组
Flume的安装部署比Logstash复杂, 以配置为中心、其基于插件的架构,可提供Java API。

3. Logstash介绍
3.1 Logstash简介
Logstash 是一个开源的数据收集引擎,具有备实时数据传输能力,可以统一过滤来自不同源的数据,并按照开发者的制定的规范输出到目的地。

Logstash 收集数据对象是日志文件。由于日志文件来源多(如:系统日志、服务器 日志等),且内容杂乱,不便于人类进行观察。因此,我们可以使用 Logstash 对日志文件进行收集和统一过滤,变成可读性高的内容,方便开发者或运维人员观察,从而有效的分析系统/项目运行的性能,做好监控和预警的准备工作等。

///一般结构都是filebeat采集日志,然后发送到消息队列,redis,kafaka。然后logstash去获取,利用filter功能过滤分析,然后存储到elasticsearch中///—后加

3.2 Logstash架构
Logstash 通过管道进行运作,管道有两个必需的元素,输入和输出,还有一个可选的元素,过滤器。输入插件从数据源获取数据,过滤器插件根据用户指定的数据格式修改数据,输出插件则将数据写入到目的地。

原始数据进入logstash后在内部流转并不是以原始数据的形式流转,在input处被转换为event,在output event处被转换为目标格式的数据。可在配置文件中对其进行增删改查操作。

 

 

输入:采集各种样式、大小和来源的数据

数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。

过滤器:实时解析和转换数据

数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。

Logstash 能够动态地转换和解析数据,不受格式或复杂度的影响:

利用 Grok 从非结构化数据中派生出结构
从 IP 地址破译出地理坐标
将 PII 数据匿名化,完全排除敏感字段
整体处理不受数据源、格式或架构的影响
输出:选择你的存储,导出你的数据

3.3 使用场景
ELK是最常用的使用场景,尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。其他使用场景,大致也如下图所示。

 

4. Kafka介绍
4.1 Kafka简介
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它最大的特性是可以实时处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

可扩展性:kafka集群支持热扩展

持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

高并发:支持数千个客户端同时读

4.2 Kafka架构
Kafka架构分为三大组件,Producer、Broker和Consumer,其中Broker受Zookeeper管理,每次所有Broker均去Zookeeper注册(Broker Leader机制),只有一个可注册成功,这个注册功能的节点成为Controller,其他的成为Follower,并受到Controller的监控和调控。Broker负责持久化和备份具体的kafka消息.

Broker:Kafka节点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
Topic:一类消息,消息存放的目录即主题,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发。
Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列
Segment:partition物理上由多个segment组成,每个Segment存着message信息
Producer : 生产message发送到topic
Consumer : 订阅topic消费message, consumer作为一个线程来消费
Consumer Group:一个Consumer Group包含多个consumer, 这个是预先在配置文件中配置好的。

Producer端使用zookeeper用来”发现”broker列表,以及和Topic下每个partition leader建立socket连接并发送消息。

Broker端使用zookeeper用来注册broker信息,已经监测partition leader存活性。

Consumer端使用zookeeper用来注册consumer信息,其中包括consumer消费的partition列表等,同时也用来发现broker列表,并和partition leader建立socket连接,并获取消息。

一个典型的Kafka集群中包含若干Producer(可以是web前端FET,或者是服务器日志等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干ConsumerGroup,以及一个Zookeeper集群。Kafka通过Zookeeper管理Kafka集群配置:选举Kafka broker的leader,以及在Consumer Group发生变化时进行rebalance,因为consumer消费kafka topic的partition的offsite信息是存在Zookeeper的。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。

分析过程分为以下4个步骤:

topic中partition存储分布
partiton中文件存储方式 (partition在linux服务器上就是一个目录(文件夹))
partiton中segment文件存储结构
在partition中如何通过offset查找message
通过上述4过程详细分析,我们就可以清楚认识到kafka文件存储机制的奥秘。

4.3 Kafka使用场景
日志收集:一个公司可以用Kafka收集各种服务log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

消息系统:解耦和生产者和消费者、缓存消息等。

用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

流式处理:比如spark streaming和storm

5. Sqoop介绍
5.1 Sqoop简介
Apache Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具。它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实现了容错。

导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统。

导出数据:从Hadoop的文件系统中导出数据到关系数据库。

在sqoop 内部,将导入或导出命令翻译成mapreduce程序来实现,在翻译出的mapreduce中主要是对 inputformat和outputformat进行定制。

5.2 Sqoop架构
Sqoop 架构是非常简单的,它主要由三个部分组成:Sqoop client、HDFS/HBase/Hive、Database。下面我们来看一下 Sqoop 的架构图。

 

用户向 Sqoop 发起一个命令之后,这个命令会转换为一个基于 Map Task 的 MapReduce 作业。Map Task 会访问数据库的元数据信息,通过并行的 Map Task 将数据库的数据读取出来,然后导入 Hadoop 中。 当然也可以将 Hadoop 中的数据,导入传统的关系型数据库中。它的核心思想就是通过基于 Map Task (只有 map)的 MapReduce 作业,实现数据的并发拷贝和传输,这样可以大大提高效率。

5.3 Sqoop应用场景
在实际的业务当中,我们首先对原始数据集通过MapReduce进行数据清洗,然后将清洗后的数据存入到Hbase数据库中,而后通过数据仓库Hive对Hbase中的数据进行统计与分析,分析之后将分析结果存入到Hive表中,然后通过Sqoop这个工具将我们的数据挖掘结果导入到MySql数据库中,最后通过Web将结果展示给客户。

因此,Sqoop主要作为一个用来,将关系型数据库和Hadoop中的数据进行相互转移的工具。

 

 

结语:关于常见的几种数据采集和传输方式,进行了比较概括性的叙述。其他几类工具,使用频次不算太高,而且架构特点和使用场景,既有相似之处,又有不同之,因此未做详细介绍,如读者有兴趣,可自行搜索,以作了解。希望,通过上述几种常见工具的介绍,大家可以对大数据采集,有一定的了解。

接下来,会分别介绍下数据分析工具,如MR、Spark、Storm和Flink,以及一些数据仓库类产品。

 

大数据架构之端到端方案综述(1)数据采集_liyunpeng229的博客-CSDN博客_数据采集方案

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/205534.html

(0)
上一篇 2021年11月29日
下一篇 2021年11月29日

相关推荐

发表回复

登录后才能评论