热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

笨鸟的平凡之路FLUME

笨鸟的平凡之路-FLUME,Go语言社区,Golang程序员人脉社
Flume的简介

Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
◆ Flume可以采集文件,socket数据包、文件、文件夹、kafka等各种形式源数据,又可以将采集到的数据(下沉sink)输出到HDFS、hbase、hive、kafka等众多外部存储系统中
◆ 一般的采集需求,通过对flume的简单配置即可实现
◆ Flume针对特殊场景也具备良好的自定义扩展能力,
因此,flume可以适用于大部分的日常数据采集场景

Flume的运行机制

1、 Flume分布式系统中最核心的角色是agent,flume采集系统就是由一个个agent所连接起来形成
2、 每一个agent相当于一个数据传递员,内部有三个组件:
a) Source:采集组件,用于跟数据源对接,以获取数据
b) Channel:传输通道组件,用于从source将数据传递到sink
c) Sink:下沉组件,用于往下一级agent传递数据或者往最终存储系统传递数据
在这里插入图片描述

Flume的安装

Flume的安装在此不赘述.

Flume的简单测试(以CDH版为例)

1.需要在CDH的界面查看Flume的Agent代理名称,这个代理名称涉及后续conf文件的编辑,非常重要
步骤:CDH主界面->Flume->配置->代理名称
在这里插入图片描述

2.创建被监控文件以及配置文件的编写(以与kafka集成为例)
2.1:创建被监控的文件
在装有Flume的节点上创建文件
vi /opt/a.txt
2.2:需要在安装了Flume的节点上编写conf配置文件,配置文件的具体位置由自己定义,自己记得就好.
示例:vi /home/testFlume.conf(必须以.conf结尾)
文件内容如下,注意这里的tier1就是在CDH上查看到的代理名称,因人而异,有的是a1等等:
tier1.sources = r1
tier1.sinks = k1
tier1.channels = c1

tier1.sources.r1.type = exec
tier1.sources.r1.command = tail -F /opt/a.txt
tier1.sources.r1.shell = /bin/sh -c

tier1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
tier1.sinks.k1.topic = test
tier1.sinks.k1.brokerList = kafka1:9092,kafka2:9092
tier1.sinks.k1.requiredAcks = 1
tier1.sinks.k1.batchSize = 20
tier1.sinks.k1.channel = c1

tier1.channels.c1.type = memory
tier1.channels.c1.capacity = 1000000
tier1.channels.c1.transactiOnCapacity= 10000

tier1.sources.r1.channels = c1
tier1.sinks.k1.channel = c1

2.3:在装有kafka的节点创建topic(与配置文件中保持一致)
kafka-topics --create --zookeeper zk1:2181,zk2:2181,zk3:2181 --replication-factor 1 --partitions 1 --topic test

2.4:创建消费者
(从头开始消费)
kafka-console-consumer --bootstrap-server kafka1:9092,kafka2:9092 --from-beginning --topic test
(非从头开始消费)
kafka-console-consumer --bootstrap-server kafka1:9092,kafka2:9092 --topic test

2.5:在装有flume的节点启动flume
flume-ng agent -n tier1 -c /opt/cm-5.11.2/run/cloudera-scm-agent/process/767-flume-AGENT/ -f /home/testFlume.conf -Dflume.root.logger=INFO,console

注释:
tier1:是agent的代理名称
/opt/cm-5.11.2/run/cloudera-scm-agent/process/767-flume-AGENT/:是通过命令行 find / -name flume.conf 找到的(如果不是CDH版的找到flume的conf目录,一般是/opt/apache-flume-1.6.0-bin/conf/)
/home/testFlume.conf:自己编写的配置文件

2.6:向被监控的文件中追加数据
echo hello flume >>/opt/a.txt

2.7:观察装有kafka节点的消费者控制台是否hello flume

Flume数据丢失和数据重复

1.提高flume的版本,1.7版本之后,可以解决断点续传和数据重复问题
-----1.7版本的flume提供Taildir Source方式
它定期以JSON格式写入给定位置文件上每个文件的最后读取位置。如果Flume由于某种原因stop或down,它可以从文件position处重新开始tail。
具体的配置:
pro.sources = s1
pro.channels = c1
pro.sinks = k1

pro.sources.s1.type = TAILDIR
pro.sources.s1.positiOnFile= /home/dev/flume/flume-1.8.0/log/taildir_position.json
pro.sources.s1.filegroups = f1
pro.sources.s1.filegroups.f1 = /home/dev/log/moercredit/logstash.log
pro.sources.s1.headers.f1.headerKey1 = aaa
pro.sources.s1.fileHeader = true

pro.channels.c1.type = memory
pro.channels.c1.capacity = 1000
pro.channels.c1.transactiOnCapacity= 100

pro.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
pro.sinks.k1.kafka.topic = moercredit_log_test
pro.sinks.k1.kafka.bootstrap.servers = cdh1:9092,cdh2:9092,cdh3:9092
pro.sinks.k1.kafka.flumeBatchSize = 20
pro.sinks.k1.kafka.producer.acks = 1
pro.sinks.k1.kafka.producer.linger.ms = 1
pro.sinks.k1.kafka.producer.compression.type = snappy

pro.sources.s1.channels = c1
pro.sinks.k1.channel = c1

2.如果不是1.7版本的flume
将channels.type方式从memory改成file
memory的形式是基于内存缓冲数据
file的形式是设置检查点
两者的区别:
type选择memory时Channel的性能最好,但是如果Flume进程意外挂掉可能会丢失数据;type选择file时Channel的容错性更好,但是性能上会比memory channel差。
具体配置:
a1.sources = r1
a1.sinks = k1
a1.channels = c1

a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /xuyi/a.txt
a1.sources.r1.shell = /bin/sh -c

a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.topic = test
a1.sinks.k1.brokerList = kafka1:9092,kafka2:9092
a1.sinks.k1.requiredAcks = 1
a1.sinks.k1.batchSize = 20
a1.sinks.k1.channel = c1

#a1.channels.c1.type = memory
a1.channels.c1.type = file
#这两个文件夹最好手动创建
a1.channels.c1.checkpointDir = /opt/checkpointDir
a1.channels.c1.dataDirs = /opt/dataDirs

a1.channels.c1.capacity = 1000000
a1.channels.c1.transactiOnCapacity= 10000

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

参考地址:
http://rdc.hundsun.com/portal/article/941.html
https://blog.csdn.net/Abysscarry/article/details/89420560


推荐阅读
  • 本文介绍了Python函数的定义与调用的方法,以及函数的作用,包括增强代码的可读性和重用性。文章详细解释了函数的定义与调用的语法和规则,以及函数的参数和返回值的用法。同时,还介绍了函数返回值的多种情况和多个值的返回方式。通过学习本文,读者可以更好地理解和使用Python函数,提高代码的可读性和重用性。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • Azkaban(三)Azkaban的使用
    界面介绍首页有四个菜单projects:最重要的部分,创建一个工程,所有flows将在工程中运行。scheduling:显示定时任务executing:显示当前运行的任务histo ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 2019我的金三银四
    先讲一下自己的情况吧,二本学生,17年毕业,目前在一家跨境电商从事Java技术开发工作(不是阿里,没那么厉害),技术栈目前偏向于容器云、持续集成持续交付这一块,也就是SpringBoot、Kuber ... [详细]
author-avatar
小子少耍酷10
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有