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系统搭建和使用的一些经验总结-搭建篇 的相关文章

  • 分布式服务高可用实现:复制

    1 为什么需要复制 我们可以考虑如下问题 当数据量 读取或写入负载已经超过了当前服务器的处理能力 如何实现负载均衡 希望在单台服务器出现故障时仍能继续工作 这该如何实现 当服务的用户遍布全球 并希望他们访问服务时不会有较大的延迟 怎么才能统
  • flume采集log4j日志到kafka

    简单测试项目 1 新建Java项目结构如下 测试类FlumeTest代码如下 package com demo flume import org apache log4j Logger public class FlumeTest priv
  • Flume 数据流监控——Ganglia的安装与部署

    1 Ganglia的安装 1 安装 dhttpd 服务与 php yasin hadoop102 flume sudo yum y install httpd php 2 安装其他依赖 atguigu hadoop102 flume sud
  • JConsole&VisualVM监控总结

    简介 JConsole 以下写作jconsole VisualVM 以下写作jvisualvm 都是比较好的JVM调优工具 且都为JDK自带 可在命令行直接启动 监控示例 Server端 需要监控的主机 配置 设置临时JAVA参数 expo
  • 最详细的Spark内存管理

    spark 各版本的内存参数 一 Spark 1 6内存管理 spark 1 6之前 使用StaticMemoryManager 叫legacy模式 默认是关闭的 spark1 6开始 使用UnifiedMemoryManager 1 6开
  • 自定义flume拦截器-实现了多种功能

    1 自定义拦截器实现说明 1 实现interceptor接口 并实现其方法 接口完全限定名为 org apache flume interceptor Interceptor 2 自定义拦截器内部添加静态内部类 实现Builder接口 并实
  • Access、SQLite、HSQLDB、Sybase、MySQL、DB4O比较

    本文转自 http blog sina com cn s blog 465bc6c90100eums html 一 Access 数据类型有些另类 而且密码太容易被攻破 性能不高 只能用在Windows程序上 一般说来 单个表不超过10万少
  • Nacos使用域名做为服务地址遇到的问题及解决方案

    一 发现问题 应用启动时 增加Nacos服务端的配置信息 应用使用IP加端口连接Nacos服务器时 运行一切正常 启动参数增加以下Nacos参数 Dspring cloud nacos discovery namespace DEV Dsp
  • windows文件传到linux导致文件类型错误处理

    问题 hadoop hadoop001 hadoop 2 6 0 cdh5 7 0 sbin start dfs sh 18 11 27 16 24 25 WARN util NativeCodeLoader Unable to load
  • 腾讯高性能RPC开发框架Tars实现服务治理(微服务)

    Github https github com Tencent Tars 1 介绍 Tars是基于名字服务使用Tars协议的高性能RPC开发框架 同时配套一体化的服务治理平台 帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用
  • flume实验

    1 上传flume ng 1 5 0 cdh5 3 6 tar gz 至 opt modules cdh 并解压 2 编辑 conf flume env sh export JAVA HOME usr java jdk1 7 0 79 3
  • LVS、Nginx、HAProxy、keepalive 的工作原理详解

    当前大多数的互联网系统都使用了服务器集群技术 集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务 这些集群可以是 Web 应用服务器集群 也可以是数据库服务器集群 还可以是分布式缓存服务器集群等等 在实际应用中 在 Web 服务
  • 量化交易框架开发实践(二)

    我们通过分析代码可以看出 PyAlgoTrade分为六个组件 Strategies Feeds Brokers DataSeries Technicals Optimizer 从业务流上看也是比较容易理解的 Feed 数据源 gt Data
  • 【Spring Boot 集成应用】 OAUTH2统一认证单点登录中的各种模式说明

    1 OAUTH2统一认证介绍 OAuth 2 0 是一个行业的标准授权协议 OAuth 2 0 专注于简化客户端开发人员 同时为 Web 应用程序 桌面应用程序 手机等各种设备接入提供特定的授权流程 2 传统登陆认证 传统登陆方式是在每个服
  • 同城双活与异地多活架构分析

    本文首发于 vivo互联网技术 微信公众号 链接 https mp weixin qq com s OjfFcjnGWV5kutxXndtpMg 作者 vivo官网商城开发团队 采用高可用系统架构支持重要系统 为关键业务提供7x24的不间断
  • 简单spring cloud服务升级实现

    1 升级原则 隔离性 v1升级到v2时 相互独立 互不不干扰 稳定性 服务不停止 完成升级 接口保持畅通 2 具体实现 2 1 eureka项目 搭建eureka 网上很多 就省略了 2 2 feign接口项目 2 2 1 依赖
  • 从架构师的角度看服务器端架构点滴

    任何服务器端的架构设计 都是性能 一致性和成本三者的权衡 从我在目前的大规模互联网视频公司的负责APP服务器端的角度来讲 我主要关注以下几个点 业务 可靠性 性能 可维护性 一 业务 框架上保证业务的快速迭代 在性能要求不高的情况下 同步架
  • Redis——Redis简介

    Redis是目前最流行的键值对 key value 数据库 以出色的性能著称 官方提供的数据是可以支持100000以上的 QPS Redis具有高性能的主要原因如下 Redis是基于内存的存储数据库 绝大部分的命令处理只是纯粹的内存操作 内
  • Redis——简单动态字符串(Simple Dynamic Strings,SDS)

    简单动态字符串 Simple Dynamic Strings SDS 是Redis的基本数据结构之一 用于存储字符串和整型数据 SDS兼容C语言标准字符串处理函数 且在此基础上保证了二进制安全 1 数据结构 在了解SDS源码前 我们先思考一
  • java.io.IOException:无法获取 LocationBlock 的块长度

    我正在使用 HDP 2 1 对于集群 我遇到了以下异常 并且 MapReduce 作业因此失败 实际上 我们定期使用 Flume 版本的数据创建表 1 4 我检查了映射器尝试读取的数据文件 但我找不到任何内容 2014 11 28 00 0

随机推荐

  • 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 为何这么坚决呢 难道没有其他工具能做个这个事情么 当然有 不过 考虑到