Flume¶
简述 flume 基础架构¶
flume传输数据依靠的是Agent进程,它主要由3个组件组成:source,channel, sink
- source 负责接收数据,可以处理各种类型的日志数据,包括avro,exec,http、 spooldir,taildir,kafka等
- channel 是位于source和sink之间的缓冲区,包括memory,file,kafka,JDBC等
- sink 负责将 channel 中的数据写入存储系统或者下一个 Flume 中,包括 HDFS,HBase,Logger、Avro 等
不同channel的特性以及使用场景¶
- Memory Channel:内存缓冲区(高性能,但易丢失数据),例如实时日志分析
- File Channel:磁盘文件缓冲区(高可靠性,支持持久化),例如日志持久化到HDFS
- JDBC Channel:数据库表作为缓冲区(支持事务),例如金融交易数据同步
请说一下你提到的几种source的不同点¶
- exec source 能够实时监控采集,但是不能保证数据不丢失
- spooldir source 能够保证数据不丢失,但是不能实时监控
- taildir source 能保证数据不丢失,并且能够实现断点续传,还能够实时监控
- Avro Source支持负载均衡,适合多级flume agent的级联操作
- http source支持JSON、表单等格式,适合Web应用或外部服务提交日志,不适合高并发
- kafka source从kafka主题消费消息,与kafka进行集成,适合处理高并发、分布式的日志流
flume采集数据会丢失吗¶
- 如果是File Channel不会,因为它将数据存储在文件中,而且传输过程还有事务保证。
- 如果是Memory Channel有可能丢,因为它将数据存储在内存中,机器断电或重启都会造成数据丢失