Flume总结

他是一个高可用的,高可靠的,分布式的海量日志采集,聚合和传输的系统。flume是流式架构,flume最主要的作用就是实时读取服务器本地磁盘的数据,将数据写入到HDFS中去。他的一个组成架构Web端=》source=》channel=》sink=》HDFS

taildir source

1、间断性的传输文件,可以监控一个目录下多个目录文件

2、flume是在Apache1.7,CDH1.6产生的

3、没有断点续传功能怎么实现,可以通过自定义的方式

4、taildir挂了怎么办,重启但是会导致数据重复

5、怎么处理重复数据,一般不处理,影响传输效率,自身添加自定义事务,或者下一级处理hive去重,sparkstreaming flink布隆

6、他不支持递归遍历文件夹读取文件,但是可以自定义递归遍历文件夹+读取文件

file channel/memory channel/kafkachannel

位于Source和sink之间的缓冲区

1、file channel

数据存储在磁盘,可靠性高,但是传输速率低

FileChannel可以通过配置dataDirs执行多个路径,每个路径对应不同的硬盘,增大Flume的吞吐量

2、memory Channel

数据存储在内存中,传输速度快,但是可靠性较差

3、Kafka channel

数据存储在Kafka,基于磁盘上的,可靠性较高

传输速度:kafka channel》memory channel+kafka channel省去了sink部分

4、生产环境中如何选择

下一级如果是kafka的话,优先选择kafka channel

如果是金融,对钱要求准确的话选择filechannel

如果是普通日志,可以选择memorychannel

HDFS sink

不断轮询channel中的事件且批量地的移除

事务

Source到Channel是Put事务

Channel到Sink是Take事务

Flume拦截器

用户Source读取events发送sink在event header中加入一些有用的信息,或对events的简单内容进行过滤完成的初步的数据清洗

1、注意事项:自定义:ETL拦截器

采用两个拦截器的优缺点,模块化开发和可移植新,性能降低

2、自定义拦截器步骤

实现Interceptor

重写四个方法

initialize初始化=>处理当个event=>处理多个event,调用event intercept

close方法

3、静态内部类,实现Interceptor.Builder

可以不使用拦截器,在下一级hive或者sparkstreaming处理

不适合做实时推荐这个要求比较高的场景

Flume Channel选择器

他可以让不同项目日志通过不同的channel到不同的sink中去

复制选择器(发往所有通道)

多路复用选择器(选择性发往自己的通道)

Flume 监控器

采用Ganglia监控器,监控flume尝试提交的次数远远大于最终成功的次数(存在大量尝试),说明flume运行比较差

解决方法,自身增加内存,-Xmx和—Xms设置一致,防止内存抖动带来的性能影响,如果不一致会导致频繁fullgc回收内存

增加服务器台数

Flume采集数据会丢失么

Filechannel不会丢失,Channel存储在FIle中,数据传输本身存在事务memorychannel有可能会丢

### Apache Flume 数据采集总结与最佳实践 Apache Flume 是一个分布式、可靠且高可用的日志收集系统,能够将数据从多个来源高效地传输到集中式存储系统中。以下是关于 Flume 数据采集的总结和最佳实践: #### 1. **Flume 的核心组件** Flume 的架构基于三个核心组件:Source、Channel 和 Sink[^3]。 - **Source**:负责接收数据。Flume 支持多种 Source 类型,如 Avro、Kafka、HTTP 等。每种 Source 都适用于不同的场景。例如,`httpSource` 可以通过 HTTP 接收数据,适用于不能部署 Flume SDK 的环境[^4]。 - **Channel**:作为临时缓冲区,用于存储从 Source 接收到的数据,直到 Sink 将其发送到目标位置。常见的 Channel 包括 Memory Channel 和 File Channel。Memory Channel 提供高性能但不持久化,而 File Channel 提供更高的可靠性[^3]。 - **Sink**:负责将数据写入目标存储系统,如 HDFS、Kafka 或 Elasticsearch。 #### 2. **数据采集的最佳实践** ##### (1) **选择合适的 Source 类型** 根据应用场景选择适合的 Source 类型是关键。例如: - 如果需要从文件系统中读取日志,可以选择 `Spooling Directory Source`[^3]。 - 如果需要通过网络接收数据,可以选择 `Netcat Source` 或 `HTTP Source`[^4]。 ##### (2) **配置可靠的 Channel** - 在对性能要求较高的场景下,可以使用 `Memory Channel`,但需要注意其数据丢失风险。 - 对于需要高可靠性的场景,建议使用 `File Channel`,因为它会将数据持久化到磁盘上,即使系统崩溃也能恢复数据[^3]。 ##### (3) **优化 Sink 的性能** - 使用批量写入(Batch Writing)可以显著提高 Sink 的性能。例如,在写入 HDFS 时,可以通过配置较大的批次大小来减少 I/O 操作次数[^2]。 - 如果目标是 Kafka,则可以通过调整 Kafka Producer 的参数(如 `batch.size` 和 `linger.ms`)来优化性能[^2]。 ##### (4) **多级数据采集结构** 在大规模分布式环境中,可以采用多级数据采集结构。例如: - 第一级 Agent 负责从本地服务器收集日志,并将其发送到第二级 Agent。 - 第二级 Agent 负责将数据聚合后写入最终存储系统(如 HDFS 或 Kafka)。这种设计可以减轻单个 Agent 的负载并提高系统的可靠性[^3]。 ##### (5) **监控与调优** - 使用 Flume 自带的监控工具或集成外部监控系统(如 Prometheus 或 Grafana)来实时监控 Flume 的运行状态。 - 定期检查 Source、Channel 和 Sink 的吞吐量及延迟,及时发现瓶颈并进行调优[^2]。 #### 3. **常见问题与解决方案** ##### (1) **数据丢失** - 如果使用 `Memory Channel`,可能会因系统崩溃导致数据丢失。解决方法是切换到 `File Channel` 或 `Kafka Channel`[^3]。 - 确保 Sink 成功将数据写入目标存储后,再从 Channel 中删除数据。 ##### (2) **性能瓶颈** - 如果发现性能不足,可以尝试增加 Agent 的数量,或者优化 Channel 和 Sink 的配置[^2]。 - 对于大规模数据流,可以考虑引入消息队列(如 Kafka)作为中间层,以缓解压力。 ```python # 示例:Flume 配置文件中的多级数据采集结构 agent1.sources = r1 agent1.channels = c1 agent1.sinks = k1 agent1.sources.r1.type = exec agent1.sources.r1.command = tail -f /var/log/messages agent1.channels.c1.type = memory agent1.channels.c1.capacity = 1000 agent1.channels.c1.transactionCapacity = 100 agent1.sinks.k1.type = avro agent1.sinks.k1.channel = c1 agent1.sinks.k1.hostname = agent2-host agent1.sinks.k1.port = 41414 # 第二级 Agent agent2.sources = r2 agent2.channels = c2 agent2.sinks = hdfs-sink agent2.sources.r2.type = avro agent2.sources.r2.bind = agent2-host agent2.sources.r2.port = 41414 agent2.channels.c2.type = file agent2.channels.c2.capacity = 10000 agent2.sinks.hdfs-sink.type = hdfs agent2.sinks.hdfs-sink.hdfs.path = hdfs://namenode:8020/logs agent2.sinks.hdfs-sink.hdfs.fileType = DataStream ``` #### 4. **总结** Apache Flume 是一个功能强大且灵活的日志收集工具,适用于多种场景。通过合理配置 Source、Channel 和 Sink,并结合多级数据采集结构,可以构建一个高效、可靠的数据采集系统[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值