flume
2025-07-04 17:46:37 1 举报
AI智能生成
演讲flume
作者其他创作
大纲/内容
概念
可以提供高可用,高可靠,分布式的海量日志<font color="#e74f4c">采集</font>,<font color="#e74f4c">聚合</font>和<font color="#e74f4c">传输</font>的系统
基于流式架构,灵活简单
什么是流式架构
持续实时的数据处理模式
与传统的批量处理的区别
批量处理
有明确的边界,数据预先收拾完
积累一定数量的数据统一处理
延迟:小时级别,天级别<br>
高吞吐适合大量静态数据
Hadoop,MR,Hive<br>
流式处理
延迟:毫秒,秒级别<br>
高并发低延迟,适合小的数据量
数据到达立即处理实时响应
Fink,Spark<br>
组成架构
Agent
他是一个JVM进程,以事件的形式将数据从源头发送到目的地,Flume数据传输的基本单元<br>
Source
负责收集数据到Agent组件中<br>
组件
Taildir Source<br>
断点续传
通过记录每个文件的 inode(文件标识符) 和 position(偏移量) 到位置文件(position file),即使 Flume 重启也能从上次中断的位置继续读取,避免数据重复或丢失
Avro Source<br>
接收 Avro 格式数据的组件
Channel
位于Source和Sink之间的缓冲区,可以同时处理多个Source和Sink的读取和写入操作<br>
Channel是线程安全<br>
确保共享资源在多线程的正确性
组件
Memory Channel
存储在内存
File Channel
支持断点续传 存储到磁盘
Sink
将批量的处理Channel中的事件,将这些事件批量的写入存储系统中,或者发给另一个Flume Agent<br>
Sink是完整事务<br>
在Channel到Sink传输过程中保持数据的一致性 保证ACID的特性(互动)<br>
原子性
一致性
隔离性
持久性
组件
Avro Sink<br>
以Avro协议发送到目标系统的组件 高效的二进制编码<br>
HDFS Sink<br>
将事件写入Hadoop分布式文件系统HDFS中<br>
Event
存储从数据源获取的数据在source channel,sink 之间流动<br>
key-value格式<br>
Headers<br>
body
拓扑结构
<br>
负载均衡
<br>
聚合
项目
<br>
流式处理
<br>
put事务 推送数据流程<br>
doput写入到临时缓冲区dolist<br>
doCommit 检查channel内存队列是否足够容纳数据 满足提交 不满足回滚<br>
doRollback<br>
事务提交失败回滚数据到putList<br>
take事务 拉取事务流程<br>
doTake Sink将数据从Channel取到临时缓冲区takeList<br>
doCommit 如果数据成功发送成功,则清除akeList中的数据<br>
doRollback 数据发送过程中若出现异常 回滚事务 tackList将事务放回Channel<br>
Event
source
外部数据源获取到数据后,会将数据封装成 Event 对象
channel
会暂存这些 Event,等待 Sink 来拉取
sink
将 Event 中的数据写入到 HDFS
内部原理
<br>
问题
Taildir 怎么实现断点续传?<br>
<br>
断点续传功能
实现流程
位置记录文件positionFile<br>
TaildirSource 通过一个JSON文件来记录每个被监控文件的读取位置<br>
文件里面有
inode<br>
LInux文件系统中的唯一标识 用于定位文件<br>
pos
文件当前读取位置的字节偏移量
file
文件路径
mtime
文件修改的时间戳
文件路径映射机制
流程
TaildirSource启动时候读取文件将文件的映射关系加载到内存<br>
Flume 集群的高可用
Flume 组件有哪些?你们是怎么选择用的?
Taildir Source
Avro Source<br>
File Channel
Memory Channel
Avro Sink<br>
HDFS Sink<br>
Flume 组成,Put 事务,Take 事务
Flume 拦截器
ETL拦截器<br>
区分类型拦截器
建造者模式
Interceptor
构造器私有化
实现Interceptor。bulider<br>
return new EventInterceptor<br>
创建list event<br>
重写四个方法
初始化
初始化 event<br>
单个事件
获取请求头请求体·
get
将json格式的数据转换为map<br>
判断请求体是否包含时间属性 如果包含则设置请求头为timestamp·<br>
<br>
多个事件
循环遍历单个事件,存入list<br>
销毁
Flume 采集数据会丢失吗?(防止数据丢失的机制)
不会,Channel 存储可以存储在 File 中,数据传输自身有事务。
Flume 内存
FileChannel 优化
HDFS Sink 小文件处理
存在大量的小文件会导致 影响Namenode性能<br>
元数据层面:每个文件都需要有一份元数据 如果小文件过多对应的元数据也会过多<br>
处理方法
增大时间间隔
提高文件大小阈值
禁用事件数滚动
0 条评论
下一页