转载自:http://blog.csdn.net/xiaochawan/article/details/8986489
好文章,留下备忘。
Flume是什么
- 收集、聚合事件流数据的分布式框架
- 通常用于log数据
- 采用ad-hoc方案,明显优点如下:
- 可靠的、可伸缩、可管理、可定制、高性能
- 声明式配置,可以动态更新配置
- 提供上下文路由功能
- 支持负载均衡和故障转移
- 功能丰富
- 完全的可扩展
核心概念
- Event
- Client
-
Agent
- Sources、Channels、Sinks
- 其他组件:Interceptors、Channel Selectors、Sink Processor
核心概念:Event
Event是Flume数据传输的基本单元。flume以事件的形式将数据从源头传送到最终的目的。Event由可选的hearders和载有数据的一个byte array构成。
- 载有的数据对flume是不透明的
- Headers是容纳了key-value字符串对的无序集合,key在集合内是唯一的。
- Headers可以在上下文路由中使用扩展
- public interface Event {
- public Map<String, String> getHeaders();
- public void setHeaders(Map<String, String> headers);
- public byte[] getBody();
- public void setBody(byte[] body);
- }
核心概念:Client
Clinet是一个将原始log包装成events并且发送它们到一个或多个agent的实体。
- 例如
- Flume log4j Appender
- 可以使用Client SDK (org.apache.flume.api)定制特定的Client
- 目的是从数据源系统中解耦Flume
- 在flume的拓扑结构中不是必须的
核心概念:Agent
一个Agent包含Sources, Channels, Sinks和其他组件,它利用这些组件将events从一个节点传输到另一个节点或最终目的。
- agent是flume流的基础部分。
- flume为这些组件提供了配置、生命周期管理、监控支持。
核心概念:Source
Source负责接收events或通过特殊机制产生events,并将events批量的放到一个或多个Channels。有event驱动和轮询2种类型的Source
- 不同类型的Source:
- 和众所周知的系统集成的Sources: Syslog, Netcat
- 自动生成事件的Sources: Exec, SEQ
- 用于Agent和Agent之间通信的IPC Sources: Avro
- Source必须至少和一个channel关联
核心概念:Channel
Channel位于Source和Sink之间,用于缓存进来的events,当Sink成功的将events发送到下一跳的channel或最终目的,events从Channel移除。
- 不同的Channels提供的持久化水平也是不一样的:
- Memory Channel: volatile
- File Channel: 基于WAL(预写式日志Write-Ahead Logging)实现
- JDBC Channel: 基于嵌入Database实现
- Channels支持事务
- 提供较弱的顺序保证
- 可以和任何数量的Source和Sink工作
核心概念:Sink
Sink负责将events传输到下一跳或最终目的,成功完成后将events从channel移除。
- 不同类型的Sinks:
- 存储events到最终目的的终端Sink. 比如: HDFS, HBase
- 自动消耗的Sinks. 比如: Null Sink
- 用于Agent间通信的IPC sink: Avro
- 必须作用与一个确切的channel
Flow可靠性
- 可靠性基于:
- Agent间事务的交换
- Flow中,Channel的持久特性
- 可用性:
- 内建的Load balancing支持
- 内建的Failover支持
核心概念:Interceptor
用于Source的一组Interceptor,按照预设的顺序在必要地方装饰和过滤events。
- 内建的Interceptors允许增加event的headers比如:时间戳、主机名、静态标记等等
- 定制的interceptors可以通过内省event payload(读取原始日志),在必要的地方创建一个特定的headers。
核心概念:Channel Selector
Channel Selector允许Source基于预设的标准,从所有Channel中,选择一个或多个Channel
- 内建的Channel Selectors:
- 复制Replicating: event被复制到相关的channel
- 复用Multiplexing: 基于hearder,event被路由到特定的channel
多个Sink可以构成一个Sink Group。一个Sink Processor负责从一个指定的Sink Group中激活一个Sink。Sink Processor可以通过组中所有Sink实现负载均衡;也可以在一个Sink失败时转移到另一个。
- Flume通过Sink Processor实现负载均衡(Load Balancing)和故障转移(failover)
- 内建的Sink Processors:
- Load Balancing Sink Processor – 使用RANDOM, ROUND_ROBIN或定制的选择算法
- Failover Sink Processor
- Default Sink Processor(单Sink)
- 所有的Sink都是采取轮询(polling)的方式从Channel上获取events。这个动作是通过Sink Runner激活的
- Sink Processor充当Sink的一个代理
相关推荐
Flume-NG 是一个分布式日志收集系统,能够从各种数据源中实时采集数据,并将其传输到集中式存储系统中。本文将指导您完成 Flume-NG 的安装和基本配置。 安装 Flume-NG 1. 先决条件:Java JDK 安装 在安装 Flume-...
Flume NG 的 Source 是数据收集的第一步,它可以监听不同的数据源并将数据送入 Channel。例如,`ExecSource` 可以从外部程序或脚本中获取数据。 ##### 源码分析 - Channel - Transaction Channel 在 Flume NG 架构...
Flume NG是Cloudera提供的一个分布式、可靠、可用的系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化数据存储系统中。由原来的Flume OG到现在的Flume NG,进行了架构重构,...
Flume-ng 是一个高可用、可靠、分布式的日志聚合系统,可以实时地从各种数据源(如日志文件、网络 socket、数据库等)中收集数据,并将其传输到目标系统中,如 HDFS、HBase 等。在本文中,我们将介绍如何在 Windows ...
日志采集部分使用Flume来实时采集日志数据,日志处理部分使用Elasticsearch来存储和处理日志数据,日志分析部分使用Kibana来提供可视化的展示结果。 系统实现 该系统的实现主要包括三个步骤:日志采集、日志处理和...
Flume-ng-sql-source-1.5.2是Apache Flume的一个扩展,它允许Flume从SQL数据库中收集数据。Apache Flume是一个分布式、可靠且可用于有效聚合、移动大量日志数据的系统。"ng"代表"next generation",表明这是Flume的...
`Mvn Flume NG SDK` 是一个用于Apache Flume集成开发的重要工具,它基于Maven构建系统,使得在Java环境中开发、管理和部署Flume插件变得更加便捷。Apache Flume是一款高度可配置的数据收集系统,广泛应用于日志聚合...
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可...
FlumeNG是Apache Flume的一个分支版本,旨在通过重写和重构来解决现有版本中的一些已知问题和限制。Flume是Cloudera开发的一个分布式、可靠且可用的系统,用于有效地收集、聚合和移动大量日志数据。它的主要用途是将...
Flume-ng-sql-source是Apache Flume的一个扩展插件,主要功能是允许用户从各种数据库中抽取数据并将其传输到其他目的地,如Apache Kafka。在本案例中,我们讨论的是版本1.5.2的发布包,即"flume-ng-sql-source-...
Apache Flume 是一个分布式...总的来说,Apache Flume-ng-1.6.0-cdh5.5.0 是一个强大且灵活的数据收集工具,特别适合在 CDH 环境中处理大规模的日志数据,它的易用性和可扩展性使其成为大数据基础设施的重要组成部分。
例如,第一级Flume Agent可以负责收集原始日志数据,第二级则负责数据清洗和格式转换。 3. **容错机制**:在Flume配置中启用容错机制,如设置重试次数、错误处理策略等,以应对网络故障或目标系统不可用的情况。 4. ...
Apache Flume 是一个分布式、可靠且可用于有效收集、聚合和移动大量日志数据的系统。在大数据处理领域,Flume 是一个至关重要的组件,尤其在数据集成和实时数据流处理中。它以其高可用性、容错性和可扩展性而闻名,...
1. **改进的性能**:通过对代码的优化和对并发处理的支持,Flume NG在数据采集速度上有了显著提升,能够快速处理大规模的日志数据。 2. **增强的稳定性**:引入了更多的错误处理和恢复机制,确保在系统故障时能够...
Flume 是 Apache 开源项目中的一款用于高效、可靠且可扩展的日志收集、聚合和传输的工具,尤其适合大规模分布式系统的日志管理。在“Flume++构建高可用、可扩展的海量日志采集系统”这个主题中,我们将深入探讨Flume...
在大数据领域,数据收集是至关重要的第一步,而 Flume 正好提供了这样的服务,使得从各种数据源高效地抽取数据成为可能。`flume-ng-1.6.0-cdh5.14.2` 版本是 Cloudera Distribution Including Apache Hadoop(CDH)...
本文将深入探讨如何使用Flume NG与Elasticsearch 6.5.4进行集成,以便将Flume收集到的数据高效地导入到Elasticsearch中,构建ELK(Elasticsearch, Logstash, Kibana)日志管理解决方案。 1. **Flume NG的Elastic...
Flume是Apache Hadoop生态体系中的一个数据收集系统,它设计用于高效地聚合、传输和存储大规模的日志数据。在2015年的版本中,Flume已经发展成为一个强大且灵活的工具,能够构建出高可用性和可扩展性的日志采集架构...
其中上篇介绍了HDFS以及流式数据/日志的问题,同时还谈到了Flume是如何解决这些问题的。本书展示了Flume的架构,包括将数据移动到数据库中以及从数据库中获取数据、NoSQL数据存储和性能调优。对于各个架构组件(源、...