热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

03Flume日志采集/构建大数据平台

数据采集是大数据应用的基础,数据源通常包括日志数据(如埋点日志,服务器日志),业务数据库,外部数据(如通过爬虫主动采集的公开数据)等。本文的主要内容:Flume简介常见的拓扑结构传

数据采集是大数据应用的基础,数据源通常包括日志数据(如埋点日志,服务器日志),业务数据库,外部数据(如通过爬虫主动采集的公开数据)等。

本文的主要内容:



  • Flume简介



  • 常见的拓扑结构



  • 传输到HDFS/Kafka





**01 Flume简介

**

Apach Flume(https://flume.apache.org/)是分布式、高可靠、高可用的海量日志采集、聚合、传输系统。Flume能将多种类型的数据源转移到中心化的数据存储,Flume可以用作实时日志的数据采集引擎。

Agent

Agent是Flume最小的运行单元,一个Agent就是一个JVM进程。它包含三个核心组件,分别是Source、 Channel、 Sink。通过这些组件, Event可以从一个地方流向另一个地方,如下图所示:

图片

图片来源于Flume官方

Event

Flume中数据传输的基本单元,由消息头和消息体组成。

Source

Source是数据的收集端,负责将数据封装到Event里,然后推入绑定的Channel中。支持avro,netcat,thrift,exec,spooldir,TAILDIR,syslog等数据源。

Channel

Channel是连接Source和Sink的组件,可以将它看做数据缓冲区(队列)。常用的Channel是MemoryChannel和FileChannel。

Sink

Sink不断地轮询Channel中的事件且批量地移除它们,但在移除之前Sink会确保这些事件成功被写入到存储或索引系统、或者被发送到另一个Flume Agent,支持HDFS,Kafka等



**02 常见的拓扑结构

**

图片



  • 每个Agent可以有多个Source、Channel、Sink

.sources =

.sinks =

.channels =



  • 利用Channel将Source、Sink进行连接

.sources.<Source1>.channels = <Channel1> <Channel2>

.sinks..channel =

.sinks..channel =

图片

1 串型模式(图片来源于Flume官方)

将多个Agent顺序(avro)串连起来,一般不建议桥接过多的Agent,会影响速度和系统的稳定性。

图片

2 聚合模式(图片来源于Flume官方)

最常见的拓扑结构,WEB应用通常分布在上百个服务器,甚至上千个、上万个服务器。每台服务器部署一个Agent,将日志统一传送到另一个Agent,再由此Agent上传到HDFS或者消息队列中。

图片

3 复制模式(图片来源于Flume官方)

分为replicating和multiplexing,replicating(默认模式)Event将被发往与Source关联的所有Channel中;multiplexing模式下,可以根据头部信息进行路由控制。



**03 传输到HDFS/Kafka

**

采集nginx日志文件(access.log)并上传HDFS和Kafka,Flume Agent组件结构如下图:

图片

nginx-hdfs-kafka.conf

# Agent a1的source,channel,sink组件定义

a1.sources = r1

a1.channels = c1 c2

_a1.sinks = s1 s2

_

_# nginx 日志文件(access.log)数据源

_

a1.sources.r1.type = TAILDIR

_a1.sources.r1.filegroups.f1 = /path/to/nginx/access.log

_

a1.sources.r1.headers.f1.headerKey1 = value1

a1.sources.r1.fileHeader = true

# s1, hdfs

a1.sinks.s1.type = hdfs

a1.sinks.s1.hdfs.path = hdfs://ip:port/nginx/%Y-%m-%d/%H-%M

# s2, kafka

a1.sinks.s2.type = org.apache.flume.sink.kafka.KafkaSink

a1.sinks.s2.kafka.topic = nginx-log

a1.sinks.s2.kafka.bootstrap.servers = ip:port

# 通过channel 关联source和sink

_a1.sources.r1.channels = c1 c2

_

a1.sinks.s1.channel = c1

a1.sinks.s2.channel = c2

Flume还支持拦截器(Source和Channel之间,对事件进行修改或者过滤),自定义Source,Sink,高可用配置等。更加详细的配置,可参考Flume官方文档:

https://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html



推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
author-avatar
竹叶清2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有