|NO.Z.00039|——————————|BigDataEnd|——|Hadoop&Flume.V02|——|Flume.v02|Flume架构.v02|

一、Flume体系结构
### --- Flume架构中的组件:

~~~     # Agent本质上是一个 JVM 进程,
~~~     该JVM进程控制Event数据流从外部日志生产者那里传输到目的地(或者是下一个Agent)。
~~~     一个完整的Agent中包含了三个组件Source、Channel和Sink,Source是指数据的来源和方式,
~~~     Channel是一个数据的缓冲池,Sink定义了数据输出的方式和目的地。
~~~     # Source是负责接收数据到Flume Agent的组件。
~~~     Source组件可以处理各种类型、各种格式的日志数据,包括avro、exec、spooldir、netcat等。
~~~     # Channel是位于Source和Sink之间的缓冲区。
~~~     Channel允许Source和Sink运作在不同的速率上。
~~~     Channel是线程安全的,可以同时处理多个Source的写入操作及多个Sink的读取操作。
### --- 常用的Channel包括:

~~~     # Memory Channel是内存中的队列。
~~~     Memory Channel在允许数据丢失的情景下适用。
~~~     如果不允许数据丢失,应该避免使用Memory Channel,
~~~     因为程序死亡、机器宕机或者重启都可能会导致数据丢失;
~~~     # File Channel将所有事件写到磁盘。
~~~     因此在程序关闭或机器宕机的情况下不会丢失数据;
~~~     Sink不断地轮询Channel中的事件且批量地移除它们,
~~~     并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。
~~~     Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。
~~~     批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。
~~~     事务一旦被提交,该Channel从自己的内部缓冲区删除事件。
~~~     Sink组件包括hdfs、logger、avro、file、null、HBase、消息队列等。
~~~     Event是Flume定义的一个数据流传输的最小单位。
二、Flume拓扑结构
### --- 串行模式

~~~     将多个flume给顺序连接起来,从最初的source开始到最终sink传送的目的存储系统。
~~~     此模式不建议桥接过多的flume数量, flume数量过多不仅会影响传输速率,
~~~     而且一旦传输过程中某个节点flume宕机,会影响整个传输系统。
### --- 复制模式(单Souce多Channel、Sink模式)

~~~     将事件流向一个或者多个目的地。这种模式将数据源复制到多个channel中,
~~~     每个channel都有相同的数据,sink可以选择传送的不同的目的地。
### --- 负载均衡模式(单Source、Channel多Sink)

~~~     将多个sink逻辑上分到一个sink组,flume将数据发送到不同的sink,
~~~     主要解决负载均衡和故障转移问题。
### --- 聚合模式

~~~     这种模式最常见的,也非常实用,日常web应用通常分布在上百个服务器,
~~~     大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。
~~~     用这种组合方式能很好的解决这一问题,每台服务器部署一个flume采集日志,
~~~     传送到一个集中收集日志的flume,再由此flume上传到hdfs、hive、hbase、消息队列中。
三、Flume内部原理
### --- Flume内部原理

~~~     总体数据流向:Souce => Channel => Sink Channel: 处理器、拦截器、选择器
五、具体过程:
~~~     # Source接收事件,交给其Channel处理器处理事件
~~~     # 处理器通过拦截器Interceptor,
~~~     对事件一些处理,比如压缩解码,正则拦截,时间戳拦截,分类等
~~~     # 经过拦截器处理过的事件再传给Channel选择器,将事件写入相应的Channel。
~~~     # Channel Selector有两种:
~~~     Replicating Channel Selector(默认),
~~~     会将source过来的Event发往所有Channel(比较常用的场景是,
~~~     用多个Channel实现冗余副本,保证可用性)
~~~     Multiplexing Channel Selector,根据配置分发event。
~~~     此selector会根据event中某个header对应的value来将event发往不同的channel
~~~     # 最后由Sink处理器处理各个Channel的事件

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on   yanqi_vip  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示