Flume系统搭建和使用的一些经验总结-搭建篇

2023-10-30

对于很多公司来说,日志的收集和集中管理是一个必然要经历的阶段。我们公司在经历了一拖再拖之后,终于不得不开始搭建日志收集系统了。

对于日志收集系统,我们的首选就是Flume。为何这么坚决呢,难道没有其他工具能做个这个事情么?当然有!不过,考虑到Flume的简单易用,稳定性和高扩展性,它是我们的最佳选择。(期间调研过很多人对于FlumeScribe等日志收集工具的对比分析,一个直观的感觉是:Flume更新,功能更强大,而且简单易用)

Flume系统的架构很灵活,可以根据自己的应用场景去灵活的适应。

我们的应用场景是这样子的:业务日志分布在不同的业务服务器上,需要统一收集起来,存储到HDFS上,以便于使用Spark进行数据分析。

我们的需求相对来说比较简单,而且日志量也并不太大。结合Flume官方文档给出的一个架构,我们设计了自己的Flume架构如下图:


每个业务服务器的Agent负责收集业务日志,然后发送到Collectors集群进行日志汇集,然后,Collectors集群将日志写到HDFS上。

这个架构在业界是一个比较常见,而且很成熟的架构。它的容灾性和扩展性比较好。

1)容灾性

每个AgentCollector使用FileChannel来缓存数据,即使发生宕机或其他异常情况,缓存的数据都是可恢复的,不会丢数据;

2)扩展性

Collector可以进行横向扩展,以接收更大规模的日志;而且Collector集群后还可以再增加下一跳的日志接收方,比如使用Flume或者Kafka对日志进一步缓冲,以应对日志量非常庞大的情况

对于我们的需求,初期使用这个架构应该够用了,不过还需要在集群上进行压力测试以确保满足需求。

根据Flume的官方文档去进行部署和启动,是一个比较轻松的事情。

部署完成后,配置文件中参数的配置是一个让人花精力去尝试的问题。导致耗费精力的原因有以下几点:

1)官方文档对于每个配置项的解释和示例过于简单;

2)各种博客和帖子介绍的配置项并不是非常全面,很多帖子中介绍的配置不适合在线上生产环境中使用,因为缺少了一些重要配置项;

下面给出我们在HDFS sink过程使用的配置文件,供参考(如果使用HDFS sink,建议把下面配置中的所有参数都配置好,否则,可能会出现莫名现象):

# -----------the sources,the channels and the sinks.in this case called 'collectorAgent'---------
collectorAgent.sources=srcca
collectorAgent.channels=channelca
collectorAgent.sinks=skca
 
# -----------sources config-----------
collectorAgent.sources.srcca.type=avro
collectorAgent.sources.srcca.bind=0.0.0.0
collectorAgent.sources.srcca.port=55555
collectorAgent.sources.srcca.channels=channelca
 
# -----------channels config-----------
collectorAgent.channels.channelca.type=file
collectorAgent.channels.channelca.checkpointDir=/data/flume/collector/channels/checkpoint               #collector的备份文件目录
collectorAgent.channels.channelca.useDualCheckpoints=true                                               #是否对备份文件启用备份
collectorAgent.channels.channelca.backupCheckpointDir=/data/flume/collector/channels/checkpointBak      #备份的文件目录
collectorAgent.channels.channelca.dataDirs=/data/flume/collector/channels/data
collectorAgent.channels.channelca.capacity=200000000
collectorAgent.channels.channelca.keep-alive=30
collectorAgent.channels.channelca.maxFileSize=2000000000
collectorAgent.channels.channelca.checkpointOnClose=true
collectorAgent.channels.channelca.transactionCapacity=10000
 
# -------hdfs sinks config-----------
collectorAgent.sinks.skca.type=hdfs
collectorAgent.sinks.skca.channel=channelca
collectorAgent.sinks.skca.hdfs.path=hdfs://***/***/***/flume/game/%Y-%m-%d
collectorAgent.sinks.skca.hdfs.filePrefix=test_%H
collectorAgent.sinks.skca.hdfs.fileSuffix=.log
collectorAgent.sinks.skca.hdfs.rollInterval=0
collectorAgent.sinks.skca.hdfs.rollSize=128000000
collectorAgent.sinks.skca.hdfs.rollCount=0
collectorAgent.sinks.skca.hdfs.minBlockReplicas=1
collectorAgent.sinks.skca.hdfs.idleTimeout=3600
collectorAgent.sinks.skca.hdfs.fileType=DataStream
collectorAgent.sinks.skca.hdfs.writeFormat=Text
collectorAgent.sinks.skca.hdfs.batchSize=1500
collectorAgent.sinks.skca.hdfs.maxOpenfiles=5000
collectorAgent.sinks.skca.hdfs.callTimeout=500
collectorAgent.sinks.skca.hdfs.threadsPoolSize=2000
collectorAgent.sinks.skca.hdfs.useLocalTimeStamp=true

总结

1Flume Agent的稳定性比较高;

2)配置文件中的细节很重要,配置不对,往往产生莫名其妙的问题,如果遇到莫名问题,极有可能是配置有问题,请耐心阅读文档和尝试;

3)配置文件中的参数配置对系统性能影响比较大,请耐心尝试,找到最优参数组合;

3FileChannel的容灾很好,不过它会严重限制Sink的速度,根据我们的测试,使用Memory Channel的性能大约是FileChannel410倍;FileChannel性能的吞吐上限大概是2Ms(使用SSD硬盘来存储FileChannelcheckpoint)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flume系统搭建和使用的一些经验总结-搭建篇 的相关文章

  • IS-IS协议 HCIP

    我需要 最狂的风 和最静的海 HCIP IS IS协议基本原理 场景应用 历史起源 路由计算过程 地址结构 路由器分类 邻居HELLO报文 邻居关系建立 DIS及DIS与DR的类比 链路状态信息的载体 链路状态信息的交互 路由算法 网络分层

随机推荐

  • IO和NIO的区别

    在这里不再过多描述IO的具体API用法 总的来说reader writer是处理字符的 而inputsream 和 outputstream是处理字节的 eg 图片什么的 其实现在大多Web应用上传图片时候也不会使用字节流而是上传一个图片存
  • elasticsearch中节点都启动但是无法形成集群问题

    近日 单台机器 8个节点的es集群 8个节点都正常started了 但是就是无法形成集群 后来看日志 日志中出现一堆的MasterNotDiscoveredException这种异常 完整日志如下 2016 04 27 15 08 22 4
  • 关于STM32软件IIC与PCF8563通信 逻辑分析仪0xA2 Missing Ack /NAK排查与解决

    最近在使用PCF8563时 准备用STM32 软件IIC通信时 改了软件IIC后 将所有函数都做了适配 但是 发现PCF正常初始化 程序无法运行 链接上逻辑分析仪后发现是一直收不到ACK 发送的A2 地址和0x08都正常 程序正常时先设置时
  • 暴力解决八皇后问题

    如题 翻到了一个以前的代码 发现是刚学c时帮同学解决八皇后问题的代码文件 足足两百行 放出来纪念一下当初傻傻的自己吧哈哈 话不多说 放代码 include
  • arm linux kernel编译问题总结

    1 make menuconfig报错 guang guang kylin Develop linux stable make menuconfig HOSTCC scripts basic fixdep Unable to find th
  • 【记录】服务器搬家记录

    服务器搬家记录 前言 零 备份数据 程序 一 备份mysql 1 先删掉无用的表和库 减小数据包大小 2 备份到本地 二 备份docker 1 提交 2 标签 3 push 4 保存挂载宿主机上的文件 三 备份定时脚本 四 开发环境 服务器
  • 完美解决:由于找不到mfc140u.dll,无法继续执行代码。

    什么是msvcp140u dll msvcp140 dll是Microsoft Visual C Redistributable的一个组件 它包含了许多用于C 编程的函数和类 如果你的系统缺少了这个文件 那么你可能会遇到 找不到msvcp1
  • js 用变量做对象key值的写法

    变量为name 对象为obj var name name var obj obj key var name jack var obj name 1 name 2 name aaa 3 console log obj name 1 jack
  • Dart中List的常用方法概述及使用案例

    在Dart中 List是一种有序的集合 它提供了许多有用的方法来操作列表数据 Flutter使用Dart语言开发 所以在Flutter中依然适用 下面是List常用的方法概述及使用案例 length属性 List的length属性返回Lis
  • pandas的时间对象

    pandas时间处理对象 pandas中有个时间库 datautil 可以使用其中的方法把多种字符串时间格式转化为时间对象 import dateutil import pandas as pd a dateutil parser pars
  • git还原到某个版本

    1 tortoisegit还原 v2还原到v1 1 1 强制还原 git reset 如果使用这种方式还原到v1 将丢失还原到v1到v2之间的所有提交及日志 1 1 1 显示日志 有save1 save2两条提交记录 1 1 2 重置版本
  • Git的理解与使用

    文章目录 一 初识Git 1 1 分布式管理系统 1 2 Git的安装与配置 二 Git理论 2 1 四个工作区域 2 2 提交代码的简易流程 2 3 Git所管理文件的四种状态 三 Git命令 3 1 基础命令 git init git
  • hash函数应用(整理)

    评估hash函数优劣的基准主要有以下两个指标 1 散列分布性 即桶的使用率backet usage 已使用桶数 总的桶数 这个比例越高 说明分布性良好 是好的hash设计 2 平均桶长 即avg backet len 所有已使用桶的平均长度
  • iTween基础之Rotate(旋转角度)

    一 基础介绍 二 基础属性 原文地址 http blog csdn net dingkun520wy article details 50696489 一 基础介绍 RotateTo 旋转游戏
  • Java判断字符串是否为数字(正负、小数)

    需求 传来一个String类型的参数 需要判断该参数是否为数字 正负 正数 小数都要能判断 吗 如果是小数则保留2位小数 开始采用Character isDigit 方法来判断一个字符串是否为数字 只能判断全是数字的字符串 不能判断小数 负
  • Anaconda创建虚拟环境+Pycharm使用Anaconda创建的虚拟环境

    首先需要下载anaconda然后在搜索栏中搜索Anaconda Prompt anaconda 点击进入 进入到envs目录然后输入以下命令 conda create n to pack python 3 7 创建一个名为 to pack且
  • vue动态绑定class属性

    vue动态绑定class的方式 第一种 对象的方式 class iscolor boo 第一个参数iscolor为类名 第二个参数boo是一个变量 类型为一个boolean值 div scope row state div data ret
  • 三角形边长求高的c语言函数公式,三角形边长计算公式

    大写数字网今天精心准备的是 三角形边长计算公式 下面是详解 求三角形的边长公式 三角形的边长公式 1 在任何一个三角形中 任意一边的平方等于另外两边的平方和减去这两边的2倍乘以它们夹角的余弦 几何语言 在 ABC中 a b c 2bc co
  • js数组分类,一维数组转二维数组

    原始数组 var arrayFirst code 1 datas a网吧 code 1 datas b网吧 code 2 datas a酒店 code 2 datas b酒店 code 3 datas a学校 code 3 datas b学
  • Flume系统搭建和使用的一些经验总结-搭建篇

    对于很多公司来说 日志的收集和集中管理是一个必然要经历的阶段 我们公司在经历了一拖再拖之后 终于不得不开始搭建日志收集系统了 对于日志收集系统 我们的首选就是Flume 为何这么坚决呢 难道没有其他工具能做个这个事情么 当然有 不过 考虑到