一、Flume基础架构

1、Agent

Agent是一个JVM进程,它以事件(Event)的形式将数据从源头送至目的。

Agent主要有3个部分组成,Source、Channel、Sink。

2、Event

Flume数据传输的基本单元,以Event的形式将数据从源头送至目的地。

Event由HeaderBody两部分组成,Header用来存放该event的一些属性,为K-V结构,Body用来存放该条数据,形式为字节数组。

3、Interceptors

在source将event放入到channel之前,调用拦截器对event进行拦截和处理。

4、Channel Selectors

一个source对接多个channel时,channel selector选择channel将event存入。

  • replicating(默认):source会将event在每个channel都复制一份

向可选的channel写入event时,即便发生异常,也会忽略。

  • multiplexing:根据event header中的属性,参考用户自己配置的映射信息,将event发送到指定的channel。

5、Sink Processors:

多个sink从一个channel中取数据,Sink Processors从中挑选一个sink来取数据

  • DefaultSinkProcessor:如果Agent中只有一个sink,默认使用DefaultSinkProcessor,如果有多个sink,多个sink对接一个channel,不能使用DefaultSinkProcessor。
  • LoadBalancingSinkProcessor对应的是Sink Group,可以实现负载均衡的功能,维护了sink组中active的sink,使用round_robin或random算法,来分散sink组中存活的sink之间的负载。
  • FailoverSinkProcessor对应的是Sink Group,可以实现故障转移的功能,维护了一个多个sink的优先级列表,按照优先级保证至少有一个sink是可以干活的,如果优先级高的sink故障了会被转移到故障池中冷却,冷却时故障的sink会尝试发送event,一旦发送成功就会移动到存活的池中。

二、Flume常用source:

1、SpoolingDirSource:

监控目录,读取目录中新增的文件,将文件的内容封装为event。

2、TailDirSource:

目前只能监控文件,读取多个文最新追加写入的内容

不会丢数据(可靠的)即使flume出现了故障或挂掉。

Taildir Source在工作时,会将读取文件的最后的位置记录在一个json文件中,一旦agent重启,会从之前已经记录的位置,继续执行tail操作。

Json文件中位置是可以修改,修改后,Taildir Source会从修改的位置进行tail操作。

如果JSON文件丢失了,此时会重新从每个文件的第一行重新读取,这会造成数据的重复。

常见问题:

TailDirSource采集的文件,不能随意重命名

如果日志正在写入时,名称为 xxxx.tmp,写入完成后改名为xxx.log,此时一旦匹配规则可以匹配上述名称,就会发生数据的重复采集。

三、自定义Interceptor

点赞、评论、浏览等不同类型的日志需要发送到不同的分析系统。此时会用到Flume拓扑结构中的Multiplexing结构,Multiplexing的原理是,根据event中Header的某个key的值,将不同的event发送到不同的Channel。

定义一个Interceptor,根据event中body的类型,为不同类型的event的Header中的key赋予不同的值。

四、Flume参数调优

1、source:

batchSize:source一次批量运输到Channel的event条数

2、channel

①type:

  • memory:channel的性能最好,但是如果Flume进程意外挂掉可能会丢失数据。
  • file:channel的容错性更好,但是性能上会比memory channel差。

②capacity :channel可容纳最大的event条数

③transactionCapacity:每次Source往channel里面写的最大event条数和每次Sink从channel里面读的最大event条数

3、sink

batchSize:Sink一次批量从Channel读取的event条数,适当调大这个参数可以提高Sink从Channel搬出event的性能。

五、Flume事务机制

六、Flume采集数据会丢失吗?

生产环境中使用TailDirSource + FileChannel 所有没有出现丢数据的情况。

根据Flume的架构原理,Flume是不可能丢失数据的,其内部有完善的事务机制,Source到Channel是事务性的,Channel到Sink是事务性的,因此这两个环节不会出现数据的丢失。

唯一可能丢失数据的情况是Channel采用memoryChannel,agent宕机导致数据丢失。

Flume不会丢失数据,但是有可能造成数据的重复,例如数据已经成功由Sink发出,但是没有接收到响应,Sink会再次发送数据,此时可能会导致数据的重复。

flume数据丢失与重复_Flume架构及常见面试相关推荐

  1. flume数据丢失与重复_Flume监听文件到kafka,文件通道,kafka消费重复问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #me the components on this agent a1.sources = r1 a1.sinks = k1 a1.channels = ...

  2. 数据丢失与重复_大数据面试题分享-恭喜这位朋友刚毕业拿到了20K

    找工作的同学有福气啦!真实大数据面试经验分享系列文章逐步上线,欢迎持续关注! 某网 一位朋友的面经,恭喜他拿到了高薪的 offer. 1.介绍项目 2.redis用过吗 谈谈redis吧 键值分别是什 ...

  3. Flume在企业大数据仓库架构中位置及功能

    Flume在企业大数据仓库架构中位置及功能 hadoop 数据仓库 flume 数据仓库架构 1.如下图所示,外部数据中,关系型数据库导入到HDFS用sqoop,由Nginx产生的文件实时监控用Flu ...

  4. 分布式架构中常见理论以及如何才能设计出高可用的分布式架构?

    分布式架构中常见理论以及如何才能设计出高可用的分布式架构? 一.前言 我们就来聊一聊目前主流的分布式架构以及分布式架构中常见理论以及如何才能设计出高可用的分布式架构好了.分布式架构中,SOA和微服务架 ...

  5. C#-MVC的Swagger对重复的架构ID(类型名重复)报错问题

    Swagger异常 {"Message":"出现错误.","ExceptionMessage":"Conflicting sche ...

  6. 手撸架构,Kafka 面试42问

    技术栈 传送门 JAVA 基础 手撸架构,Java基础面试100问_vincent-CSDN博客 JAVA 集合 手撸架构,JAVA集合面试60问_vincent-CSDN博客 JVM 虚拟机 手撸架 ...

  7. MSQL常见面试问题

    Mysql 一.数据库基础 1.1 sql 语句 1.2 数据库优化 SQL 优化 1.我们在进行数据库查询时首先应该避免的是全表扫描,限定数据的范围.比如查询某一段时间的数据. ​ 2.对于使用wh ...

  8. 手撸架构,Redis面试41问

    技术栈 传送门 JAVA 基础 手撸架构,Java基础面试100问_vincent-CSDN博客 JAVA 集合 手撸架构,JAVA集合面试60问_vincent-CSDN博客 JVM 虚拟机 手撸架 ...

  9. 手撸架构,MyBatis 面试42问

    技术栈 传送门 JAVA 基础 手撸架构,Java基础面试100问_vincent-CSDN博客 JAVA 集合 手撸架构,JAVA集合面试60问_vincent-CSDN博客 JVM 虚拟机 手撸架 ...

最新文章

  1. CTFshow 文件上传 web162
  2. Python中的range和xrange区别
  3. 第二章 栈和队列(1)——顺序存储
  4. 自建zookeeper测试dubbo
  5. FedML联邦机器学习框架正式开源,助力算法开发和性能比较
  6. esxi安装openwrt_双软路由安装——ROS安装、上网、DNS缓存、常用设置(小白教程)...
  7. JavaScript取出字符串中括号里的内容
  8. 【阿里云EMR实战篇】以EMR测试集群版本为例,详解 Flink SQL Client 集成 Hive 使用步骤
  9. 已经是最大股东却还要全资收购!腾讯看上了搜狗的啥?
  10. 使用iBatis数据映射框架吧
  11. linux打开文件命令_详解Linux中3个文件查找相关命令
  12. linux7inittab文件不存在,Linux下修复inittab文件丢失的两种方法
  13. 僵尸逃跑服务器没有响应,cs1.6服务器[ZMParadise]1#僵尸逃跑+感染*China ip地址
  14. JVM监控及诊断工具GUI篇之Eclipse MAT
  15. 美观实用的BeautifulReport测试报告
  16. 如何增加无人机的飞行时间和升力?
  17. 加权最小二乘法matlab,加权最小二乘法matlab
  18. lof基金溢价率php源码,一文读懂LOF基金套利策略 LOF是球友们很喜欢的一类基金,这类基金不仅可以在场内进行高效买卖,而且还可以进行折溢价套利。不过这里面牵扯到很多细节,... - 雪球...
  19. 苹果6s照相快门声音设置_苹果手机内置录屏技巧,还能加入自己的声音,花3秒钟设置一下...
  20. (转) 两天快速开发一个自己的微信小程序

热门文章

  1. 没有 4.21 ,Linus Torvalds 宣布 Linux 进入 5.0 时代
  2. vue项目持久化存储数据的实现代码
  3. java如何追加写入txt文件
  4. MariaDB数据库介绍三、MHA(Master HA)实现主节点故障转移
  5. gson 的简单使用
  6. Win7实用技巧之四拯救桌面行动之Jumplist
  7. 书多嚼不烂,看书的方法
  8. crontab执行脚本中文乱码,手动执行没有问题
  9. linux blkid命令 查看块设备文件系统类型、LABEL、UUID信息 简介
  10. 比特币区块链上最小的单位“聪” Satoshi STA 简介