跳转至

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有可能丢,因为它将数据存储在内存中,机器断电或重启都会造成数据丢失

评论