- flume是分布式的日志收集系统,将各个服务器中的数据收集起来并送到指定的地方去。一个典型的例子:flume从一组web服务器中收集日志文件,然后把这些文件中的日志事件转移到一个新的HDFS汇总文件中做进一步处理。flume的核心是将数据从数据源(source:数据来源)收集,将收集到的数据转移到指定目的地(sink:数据目标)。为了保证输送成功率,在送到sink前会先缓存数据(channel:用于连接source和sink),数据真正到sink后,flume删除缓存数据。 启动flume就需要运行flume代理(agent),每个agent包含(source、channel、sink),这是一个基本flume构件。Flume由一组分布式括扑结构相互连接的代理构成。系统边缘的代理负责采集数据(例:web服务器同一台机器上的代理)负责采集数据,并把数据转发给负责汇总的代理,然后再将这些数据存储到其最终目的地。
- 一个source可以向一个以上的channel传递数据,而一个sink只能吸纳来自一个channel的数据。一个channel可以向多个sink输送数据。
- flume中有两个独立的事务分别负责source->channel、channel->sink过程中的数据传递。一旦传递中途由于某些原因导致时间无法记录,那么事务将会自动回滚,事件将保留在原地,等待重新传递。
- channel分为file channel以及memory channel。file channel具有持久性,只要事件被写入channel就保存在磁盘上,即使代理重新启动,事件也不会丢失。memory channel将事件写在内存里,一旦代理重新启动,事件就会丢失,不具备持久性,但有较高的吞吐量。
- “At-least-once”:每个事件到达sink至少一次。同一事件可能会重复到达,代理重启后,source还是会为所有未完成的文件重新提交时间,sink也会重新记录哪些已经记录但未提交的事件。这是一个可接受的性能上的权衡。
- 批量处理:flume在有可能的情况下尽量以事务为单位批量的处理事件。批量大小取决于组件类型。
- flume事件的数据通常按时间分区。一个flume事件将被写入哪个分区是由事件中header中timestamp决定。默认情况,事件头没有header,可以通过拦截器(一种能够对事件流中的时间进行修改或删除的组件,连接source,并在数据在被传到channel之前进行处理)添加。
- 扇出:一个source向多个channel,亦即向多个sink传递事件。
- sink组:允许将多个sink当成一个sink做处理,以实现故障转移或负载均衡。
flume
最新推荐文章于 2024-02-19 17:11:31 发布