Flume介绍
flume基础知识
flume基础知识⼀、Flume简介 flume 作为 cloudera 开发的实时⽇志收集系统,受到了业界的认可与⼴泛应⽤。
Flume 初始的发⾏版本⽬前被统称为 Flume OG(original generation),属于 cloudera。
但随着 FLume 功能的扩展,Flume OG 代码⼯程臃肿、核⼼组件设计不合理、核⼼配置不标准等缺点暴露出来,尤其是在 Flume OG 的最后⼀个发⾏版本 0.9.4. 中,⽇ 志传输不稳定的现象尤为严重,为了解决这些问题,2011 年 10 ⽉ 22 号,cloudera 完成了 Flume-728,对 Flume 进⾏了⾥程碑式的改动:重构核⼼组件、核⼼配置以 及代码架构,重构后的版本统称为 Flume NG(next generation);改动的另⼀原因是将 Flume 纳⼊ apache 旗下,cloudera Flume 改名为 Apache Flume。
备注:Flume参考资料⼆、Flume特点flume是⼀个分布式、可靠、和⾼可⽤的海量⽇志采集、聚合和传输的系统。
⽀持在⽇志系统中定制各类数据发送⽅,⽤于收集数据;同时,Flume提供对数据进⾏简单处理, 并写到各种数据接受⽅(⽐如⽂本、HDFS、Hbase等)的能⼒。
flume的数据流由事件(Event)贯穿始终。
事件是Flume的基本数据单位,它携带⽇志数据(字节数组形式)并且携带有头信息,这些Event 由Agent外部的Source⽣成,当 Source捕获事件后会进⾏特定的格式化,然后Source会把事件推⼊(单个或多个)Channel中。
你可以把Channel看作是⼀个缓冲区,它将保存事件直到Sink处理完该事件。
Sink负责持久化⽇志或者把事件推向另⼀个Source。
1)flume的可靠性 当节点出现故障时,⽇志能够被传送到其他节点上⽽不会丢失。
Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent⾸先将 event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。
flume工作原理
Flume工作原理详解Flume是一个分布式、高可靠、高可用的大数据采集系统,用于将海量数据从各种源头(包括日志文件、消息队列等)收集到目标存储(如Hadoop HDFS)中。
在本文中,我们将详细介绍Flume的基本原理和工作流程。
1. Flume的核心概念在深入了解Flume的工作原理之前,我们需要先了解一些Flume的核心概念。
•Agent:Agent是Flume的基本工作单元,负责数据的采集、传输和存储。
一个Agent由多个组件组成,包括Source、Channel和Sink。
•Source:Source负责从数据源头获取数据,并将其传递给Channel。
•Channel:Channel是Source和Sink之间的缓冲区,用于存储待传输的数据。
Flume提供了多种类型的Channel,例如Memory Channel、FileChannel和Kafka Channel等。
•Sink:Sink负责将数据写入目标存储中,例如HDFS、HBase或Kafka等。
2. Flume的工作流程Flume的工作流程可以分为三个主要阶段:采集阶段、传输阶段和存储阶段。
下面我们将逐个阶段详细介绍。
2.1 采集阶段在采集阶段,Flume通过Source组件从数据源头获取数据。
Flume提供了多种类型的Source,可以根据不同的数据源选择合适的Source。
常见的Source类型有:•Avro Source:用于接收Avro格式的数据。
•Netcat Source:通过TCP协议监听指定端口,接收文本数据。
•Exec Source:通过执行外部命令获取数据。
•Spooling Directory Source:监控指定目录下的文件,并将文件内容作为事件发送。
在采集阶段,Flume还可以进行一些预处理操作,例如数据过滤、格式转换等。
这些操作可以通过自定义Interceptor实现。
2.2 传输阶段在传输阶段,Flume使用Channel组件将从Source获取到的数据传递给Sink。
flume的作用
flume的作用
flume是一个分布式、可靠、可扩展的系统,用于在大规模数据流中收集、聚合和移动数据。
它的作用包括:
1、数据收集:flume可以从各种来源(例如Web服务器、消息队列、文件系统等)收集数据,并将其发送到指定的目标位置。
2、数据聚合:flume可以将来自不同源的数据进行聚合,以便更好地理解和分析数据。
3、数据转换:flume可以将收集到的数据进行转换和过滤,以便满足特定的需求。
4、数据传输:flume可以将聚合和转换后的数据传输到不同的目标位置,例如HDFS、HBase、Elasticsearch等。
flume的应用非常广泛,以下是一些常见的应用场景:
1、日志收集和聚合:flume可以用于从各种来源(例如Web服务器、应用程序、数据库等)收集日志数据,并将它们聚合到一个地方进行分析。
2、数据备份和恢复:flume可以用于定期备份数据,并将备份数据传输到另一个位置以进行恢复。
3、数据清洗和转换:flume可以用于在收集数据之前对数据进行清洗和转换,以确保数据的一致性和准确性。
4、实时数据处理:flume可以用于实时处理数据,例如通过连接Kafka或Storm流式处理引擎来实现实时数据分析。
5、数据挖掘和机器学习:flume可以用于从大量数据中挖掘有价值的信息,并将这些信息传递给机器学习算法进行分析和预测。
flume可以帮助企业实现数据的采集、处理和传输,从而提高数据的可靠性、可用性和价值。
Flume入门--几种不同的Sinks
Flume⼊门--⼏种不同的Sinks主要介绍⼏种常见Flume的Sink--汇聚点1.Logger Sink记录INFO级别的⽇志,⼀般⽤于调试。
前⾯介绍Source时候⽤到的Sink都是这个类型的Sink必须配置的属性:属性说明:!channel –!type – The component type name, needs to be loggermaxBytesToLog 16 Maximum number of bytes of the Event body to log要求必须在 --conf 参数指定的⽬录下有 log4j的配置⽂件可以通过-Dflume.root.logger=INFO,console在命令启动时⼿动指定log4j参数案例:前⾯的例⼦都是这种类型的Sink2.File Roll Sink在本地⽂件系统中存储事件。
每隔指定时长⽣成⽂件保存这段时间内收集到的⽇志信息。
属性说明:!channel –!type – 类型,必须是"file_roll"!sink.directory – ⽂件被存储的⽬录sink.rollInterval 30 滚动⽂件每隔30秒(应该是每隔30秒钟单独切割数据到⼀个⽂件的意思)。
如果设置为0,则禁⽌滚动,从⽽导致所有数据被写⼊到⼀个⽂件。
sink.serializer TEXT Other possible options include avro_event or the FQCN of an implementation of EventSerializer.Builder interface.batchSize 100案例: 编写配置⽂件:#命名Agent a1的组件a1.sources = r1a1.sinks = k1a1.channels = c1#描述/配置Sourcea1.sources.r1.type = httpa1.sources.r1.port = 6666#描述Sinka1.sinks.k1.type = file_rolla1.sinks.k1.sink.directory = /home/park/work/apache-flume-1.6.0-bin/mysink#描述内存Channela1.channels.c1.type = memorya1.channels.c1.capacity = 1000a1.channels.c1.transactionCapacity = 100#为Channle绑定Source和Sinka1.sources.r1.channels = c1a1.sinks.k1.channel = c1启动flume:./flume-ng agent --conf ../conf --conf-file ../conf/template7.conf --name a1 -Dflume.root.logger=INFO,console测试:通过curl命令向⽬标主机发送请求,就会发现在指定的⽂件夹下出现记录收集⽇志的⽂件3.Avro Sink是实现多级流动和扇出流(1到多) 扇⼊流(多到1) 的基础。
Flume详解
Flume详解
Flume是⼀种分布式,可靠且可⽤的服务,⽤于有效地收集,聚合和移动⼤量⽇志数据。
它具有基于流数据流的简单灵活的架构。
它具有可靠的可靠性机制和许多故障转移和恢复机制,具有强⼤的容错性。
它使⽤简单的可扩展数据模型,允许在线分析应⽤程序。
Apache Flume团队很⾼兴地宣布推出Flume 1.9.0。
Flume是⼀种分布式,可靠且可⽤的服务,⽤于有效地收集,聚合和移动⼤量流式事件数据。
版本1.9.0是作为Apache顶级项⽬的第11个Flume版本。
Flume 1.9.0是⼀款稳定的⽣产型软件,与以前版本的Flume 1.x代码⾏向后兼容。
这个版本进⾏了⼏个⽉的积极开发:⾃1.8.0以来已经提交了⼤约70个补丁,代表了许多功能,增强功能和错误修复。
虽然可以在1.9.0版本页⾯(下⾯的链接)上找到完整的更改⽇志,但以下是⼀些新的功能亮点:
更好的SSL / TLS⽀持
配置过滤器,提供将密码等敏感信息注⼊配置的⽅法
Context中的Float和Double值⽀持
Kafka客户端升级到2.0
HBase 2⽀持。
Flume架构原理详解
Flume多agent架构:该场景主要应用于收集FusionInsight集群外节点上的日 志,并经过多个Flume节点最终汇聚到集群内。
Source
Sink
Channel Log
Source
Channel
Sink HDFS
第2页
Flume架构(续)
Interceptor
events
Source
events
Channel Porcessor
Sink Runner
events
Channel Selector
Sink Processor
events
Channel
events
Channel
events
Sink
第3页
目录
1. Flume架构 2. Flume基本概念 3. Flume可靠性 4. Flume安装与配置
第9页
基本概念 - Channel Selector
Channel Selector允许Source基于预设的标准,从所有Channel 中,选择一个或多个Channel,即同一个数据源可以分发到不 同的目的。
内建的Channel Selectors类型:
复制Replicating:event被复制到相关的channel,即数据都放到 同一个目的地
可以根据键值选择发到不同的目的地。 Headers可以在上下文路由中使用扩展。
public interface Event { public Map<String, String> getHeaders(); public void setHeaders(Map<String, String> headers); public byte[] getBody(); public void setBody(byte[] body);
简述flume的主要作用
简述flume的主要作用Flume是一个大数据处理框架,主要用于在分布式环境中高效地收集、聚合和传输大规模数据。
它的主要作用是实现可靠地、高吞吐量地将数据从源头收集到目的地。
Flume的主要作用可以概括为以下几点:1. 数据收集:Flume可以从各种不同的数据源中收集数据,包括日志文件、消息队列、数据库等。
它提供了多种数据源的适配器,可以轻松地配置和管理数据源,实现数据的实时收集。
通过Flume的数据收集功能,用户可以方便地获取分布式环境中的大量数据。
2. 数据聚合:在数据收集的过程中,Flume可以将来自不同数据源的数据进行聚合。
它支持多种不同的聚合策略,如时间窗口、大小窗口等,可以根据用户的需求进行配置。
通过数据聚合功能,用户可以将分散在不同数据源中的数据汇总到一起,方便后续的处理和分析。
3. 数据传输:Flume可以将收集到的数据传输到指定的目的地。
目的地可以是Hadoop集群中的HDFS、HBase等存储系统,也可以是Kafka、Spark等数据处理系统。
Flume提供了多种传输协议和格式,可以灵活地配置和管理数据传输。
通过数据传输功能,用户可以将收集到的数据高效地传输到指定的位置,方便后续的数据处理和分析。
4. 数据可靠性:Flume具有高度的可靠性和容错性。
它可以在数据传输过程中进行数据重试、数据丢弃、数据备份等操作,保证数据的完整性和可靠性。
Flume还支持数据的事务性处理,可以保证数据的一致性和可靠性。
通过数据可靠性功能,用户可以放心地使用Flume进行数据收集和传输,不用担心数据丢失或损坏的问题。
5. 数据扩展性:Flume具有良好的扩展性,可以满足不同规模和需求的数据处理场景。
它采用了分布式架构和可插拔的组件模型,可以方便地进行水平扩展和功能扩展。
Flume的组件之间可以进行灵活的配置和组合,可以根据用户的需求定制和扩展功能。
通过数据扩展性功能,用户可以根据实际情况灵活地调整和扩展Flume的能力。
flume的介绍
flume的介绍
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。
Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
Flume最早是Cloudera提供的日志收集系统,是Apache下的一个孵化项目。
Flume具有以下特点:
1. 分布式:Flume是一个分布式系统,由多个独立的Agent组成,每个Agent 负责从不同的数据源收集日志数据,并将数据传输到中央存储系统。
2. 高可靠性:Flume具有可靠的可靠性机制以及许多故障转移和恢复机制,具有强大的容错性和容错能力。
3. 可定制化:Flume允许用户自定义数据发送方和数据接收方,以适应不同的日志数据格式和存储需求。
4. 灵活的数据模型:Flume使用一个简单的可扩展数据模型,允许在线分析应用程序。
5. 易于使用:Flume提供了丰富的API和配置选项,使得用户可以轻松地配置和管理Flume系统。
总之,Flume是一个功能强大的分布式日志收集系统,可以帮助用户高效地收集、汇总和移动大量日志数据。
Hadoop中的数据采集与实时处理指南
Hadoop中的数据采集与实时处理指南随着大数据时代的到来,数据采集和实时处理成为了企业和组织中不可或缺的重要环节。
Hadoop作为一种分布式计算框架,为我们提供了强大的数据处理和存储能力。
本文将为大家介绍Hadoop中的数据采集与实时处理的指南,帮助读者更好地理解和应用这一技术。
一、数据采集数据采集是大数据处理的第一步,它涉及到从各种数据源中收集、提取和存储数据。
Hadoop提供了多种数据采集的方式,下面我们将介绍其中两种常用的方法。
1. FlumeFlume是Hadoop生态系统中的一种可靠、可扩展的分布式数据采集系统。
它可以帮助我们从各种数据源(如日志文件、消息队列等)中收集数据,并将其传输到Hadoop集群中进行处理和存储。
Flume采用了Agent-Channel-Sink的架构,可以通过配置文件来定义数据的采集和传输规则。
2. KafkaKafka是一种高吞吐量的分布式消息队列系统,也是Hadoop生态系统中常用的数据采集工具。
它可以帮助我们实时地收集和传输大量的数据,并以可靠和可扩展的方式进行存储和处理。
Kafka的架构包括了Producer、Broker和Consumer三个组件,通过配置文件可以定义数据的生产和消费规则。
二、实时处理实时处理是指对数据进行即时分析和处理,以便快速获取有价值的信息和洞察。
Hadoop提供了多种实时处理的工具和框架,下面我们将介绍其中两种常用的方法。
1. StormStorm是一种分布式实时计算系统,它可以帮助我们实时地处理和分析大量的数据。
Storm的架构包括了Spout、Bolt和Topology三个组件,通过编写Java或其他编程语言的代码,我们可以定义数据的处理流程和逻辑。
Storm具有高可靠性和可扩展性,适用于对数据进行实时处理和计算的场景。
2. Spark StreamingSpark Streaming是Apache Spark的一个模块,它可以帮助我们实时地处理和分析数据流。
flume的应用场景
flume的应用场景
Flume是一种开放源代码的分布式日志收集、聚合和传输工具,
其应用场景如下:
1. 数据的采集和传输:Flume适用于需要在集群中传输数据的应用,如日志和事件数据采集以及实时数据采集和传输等。
2. 日志收集:Flume可以收集服务器上的各种日志文件,并将它们聚合到一个集中的位置以便后续的管理、存储和分析等。
3. 数据管道的建立:Flume可以将多个数据源连接在一起,形成一个数据管道,以实现数据在系统内部的传输和处理。
4. 数据存储:Flume可以将数据传输到多种数据存储介质中,如数据库、Hadoop HDFS等。
5. 数据分析:Flume可以将数据传输到数据分析工具中,以帮助用户对数据进行分析和处理。
例如,将日志数据传输到Elasticsearch、Kibana等工具中进行数据可视化和分析。
总之,Flume是一个功能强大的数据收集、传输和分析工具,适
用于各种场景下的数据处理需求。
简述flume的概念
flume简述什么是flumeFlume是一个可靠、分布式、高可扩展的日志收集和聚合系统。
它被广泛用于将大量日志数据从各种源头(包括Web服务器、数据库、应用程序等)收集到集中式的存储系统中(如Hadoop、HDFS、Kafka等),以便后续的批处理和实时分析。
flume的架构Flume的架构包含了三个核心组件:Agent、Source、Sink。
Agent是一个独立的进程,负责收集、聚合和传输日志数据。
Source负责从各种来源收集数据,如Avro、Thrift、JMS等。
Sink则负责将数据传输到指定的目的地,如HDFS、HBase、Elasticsearch等。
Flume的架构是灵活可扩展的,用户可以根据自己的需求添加或修改Source和Sink组件来满足不同的数据收集和传输需求。
Agent可以部署在不同的节点上来实现数据的并行收集和传输。
flume的工作流程Flume的工作流程可以概括为以下几个步骤:1.Agent启动并监听指定的端口,等待数据源发送数据。
2.数据源发送数据到Agent。
3.Agent根据配置文件中定义的Source组件接收数据,并将数据传输给Channel组件。
4.Channel组件将数据缓存起来,以便后续的处理。
5.Source组件将数据传输给Sink组件,Sink组件负责将数据传输到指定的目的地。
6.目的地接收数据并进行存储或处理。
flume的特性Flume具有以下几个特性,使其成为一个优秀的日志收集和聚合系统:1.高可靠性:Flume使用可靠的日志传输机制,保证数据的可靠传输。
如果传输失败,Flume会自动重试,直到数据成功传输。
2.可扩展性:Flume的架构设计具备高度的可扩展性。
用户可以根据需求添加或修改Source和Sink组件,并且可以部署多个Agent来实现数据的并行收集和传输。
3.容错性:Flume支持数据的备份和故障恢复机制,保证数据在传输过程中不会丢失。
flume jmx 指标
flume jmx 指标
Flume是一个分布式、可靠的日志收集和聚合系统,它使用JMX (Java Management Extensions)来监控和管理其运行状态。
以下是一些常见的Flume JMX指标:
1. EventPutSuccessCount:成功放置到Flume通道中的事件数量。
2. EventPutAttemptCount:尝试放置到Flume通道中的事件数量。
3. EventTakeSuccessCount:成功从Flume通道中获取的事件数量。
4. EventTakeAttemptCount:尝试从Flume通道中获取的事件数量。
5. ChannelSize:Flume通道中当前存储的事件数量。
6. SinkConnectionCreatedCount:与Flume Sink建立的连接数量。
7. SinkConnectionClosedCount:与Flume Sink关闭的连接数量。
8. SourceConnectionCreatedCount:与Flume Source建立的连接数量。
9. SourceConnectionClosedCount:与Flume Source关闭的连接数量。
10. SourceAcceptedCount:Flume Source接受的事件数量。
以上指标可以通过Flume的JMX接口获取,用于监控Flume的性能和运行状态。
flume headers中timestamp格式
flume headers中timestamp格式Flume是一种常用的数据收集工具,用于将数据从多个源收集到一个或多个目标位置。
在Flume中,Headers是一个重要的概念,用于传递附加信息,如时间戳。
时间戳是一种重要的元数据,用于标识事件发生的时间。
在Flume的Headers中,timestamp的格式通常遵循一定的标准,以确保其准确性和一致性。
本文将介绍Flume Headers中timestamp格式的常见类型、表示方法以及相关注意事项。
一、Timestamp格式概述Flume的Headers中的timestamp表示事件发生的时间,通常以时间戳的形式表示。
时间戳是一种数值表示的时间,通常以秒或毫秒为单位,表示自某个特定时刻(如UTC时间)以来的时间间隔。
在Flume中,timestamp的格式可以根据需要进行自定义,但通常遵循一定的标准格式,以确保其准确性和一致性。
二、常见Timestamp格式1. UNIX timestamp:UNIX timestamp是常用的时间戳格式,表示从1970年1月1日(UTC时间)以来的秒数。
在Flume中,UNIX timestamp是最常见的timestamp格式之一。
2. RFC3339 timestamp:RFC3339 timestamp是一种标准的时间戳格式,用于表示日期和时间。
它使用特定的日期和时间表示方法,具有可读性和可扩展性。
在Flume中,RFC3339 timestamp也是一种常见的timestamp格式。
3. Java Date:Java Date是Java编程语言中表示日期和时间的类。
在Flume中,可以使用Java Date类型的字段来传递timestamp。
这种方法适用于需要使用Java编程语言的场景。
三、Timestamp的表示方法在Flume的Headers中,timestamp可以通过多种方式表示。
常见的表示方法包括数字表示法和文本表示法。
04、日志收集系统Flume-实时计算4-4:flume自定义开发
Flume 深入开发--RPC
• LoadBalancing RPC client
Flume 深入开发-- Transaction
• Transaction interface
Transaction接口是基于flume的稳定性。所有主 要的组件(sources、sinks、channels)都必须使用 Flume Transaction。
一个Transaction在Channel实现内实现。每一个 连接到channel的source和sink都要获取一个 Transaction对象。这Sources实际上使用了一个 ChannelSelector接口来封装Transaction。存放事件 到channel和从channel中提取事件的操作是在一个活 跃的Transaction内执行的。
Flume 深入开发--RPC
• RPC client interface
Flume的RpcClient实现了Flume的RPC机制。用户的应 用程序可以很简单的调用Flume Client SDK的 append(Event) 或者appendBatch(List<Event>) 方法发送 数据,不用担心底层信息交换的细节。用户可以提供所需 的event通过直接实现Event接口,例如可以使用简单的方 便的实现SimpleEvent类或者使用EventBuilder的 writeBody()静态辅助方法。
Flume 深入开发
Flume 深入开发
• Flume 深入开发 --RPC • Flume深入开发 -- Source • Flume深入开发 -- Sink
flume的sink类型
flume的sink类型
Flume是一个高可用性、高可靠性的分布式系统,用于有效地收集、聚合和移动大量的日志数据。
Flume支持多种sink类型,它们决定了Flume数据的最终目的地。
以下是Flume的sink类型:
1. HDFS Sink:将数据写入Hadoop HDFS文件系统。
2. Hive Sink:将数据写入Hadoop Hive,以便进行进一步的数据分析。
3. Kafka Sink:将数据写入Kafka消息队列,以便进行进一步的处理。
4. Logger Sink:将数据写入日志文件,以便进行跟踪和调试。
5. Avro Sink:将数据序列化为Avro格式,以便进行更高效的传输和存储。
6. Elastic Search Sink:将数据写入Elastic Search搜索引擎,以便进行全文搜索和数据分析。
7. S3 Sink:将数据写入Amazon S3对象存储服务,以便进行长期存储和备份。
Flume支持的sink类型使用户能够轻松地将数据导出到各种目的地,以便进行进一步的处理和分析。
- 1 -。
flume组成架构
flume组成架构Flume是一种用于大规模数据采集和传输的分布式系统,它的架构由多个组件组成。
本文将介绍Flume的架构,并详细解释每个组件的功能和作用。
Flume的架构可以分为三个主要组件:Agent、Source和Sink。
Agent是Flume的核心组件,负责协调整个数据传输过程。
它接收来自Source的数据,并将其传输到Sink。
Agent还负责管理和监控整个系统的运行状态,以及处理故障和错误情况。
Agent可以部署在单个节点上,也可以在多个节点上组成一个集群,以实现高可用性和容错性。
Source是Flume的数据源组件,负责收集和获取数据。
它可以从不同的数据源中读取数据,如日志文件、网络接口、消息队列等。
Source将收集到的数据传输给Agent进行处理和传输。
Flume提供了多种类型的Source,以适应不同的数据源需求。
Sink是Flume的数据目标组件,负责将数据传输到指定的目标位置。
它可以将数据写入到文件、数据库、Hadoop集群等。
Sink可以根据需要进行扩展,以支持更多的数据目标类型。
Flume提供了多种类型的Sink,以适应不同的数据目标需求。
除了Agent、Source和Sink,Flume的架构还包括Channel和Interceptor。
Channel是Flume的数据缓冲区组件,用于暂存和传输数据。
它位于Source和Sink之间,负责将数据从Source传输到Sink。
Channel可以根据需要进行配置,以满足数据传输的性能和可靠性要求。
Flume提供了多种类型的Channel,如内存通道、文件通道、Kafka通道等。
Interceptor是Flume的数据处理组件,用于对数据进行处理和转换。
它可以在数据传输过程中对数据进行过滤、格式化、加密等操作。
Interceptor可以根据需要进行扩展,以实现更复杂的数据处理需求。
Flume提供了多种类型的Interceptor,以支持不同的数据处理场景。
flume的拓扑结构
flume的拓扑结构Flume的拓扑结构在大数据处理中,Flume是一个常用的分布式日志收集工具,能够高效地将大量的日志数据从源头传输到目的地。
Flume的拓扑结构是指Flume的组件以及它们之间的关系和连接方式。
本文将介绍Flume的拓扑结构及其作用。
1. Agent(代理)Agent是Flume的基本组件,负责收集、传输和存储数据。
一个Flume系统可以由多个Agent组成,每个Agent都有自己的配置文件和运行环境。
Agent可以在不同的物理节点上运行,也可以在同一节点上运行多个Agent,实现数据的并发处理。
2. Source(数据源)Source是Agent的输入组件,负责从数据源收集数据并将其传输给Channel。
Flume提供了多种类型的Source,如Avro、Netcat、Exec等,用于接收不同类型的数据源,如日志文件、网络端口、命令行等。
3. Channel(通道)Channel是Agent的缓冲区,用于存储Source收集到的数据。
Channel可以是内存通道、文件通道或其他类型的通道。
不同类型的Channel具有不同的特点,如内存通道适用于高吞吐量的场景,而文件通道适用于大容量的场景。
4. Sink(数据目的地)Sink是Agent的输出组件,负责将数据从Channel传输到数据目的地。
Flume提供了多种类型的Sink,如HDFS、HBase、Kafka 等,用于将数据存储到不同的数据存储系统中。
5. Channel Selector(通道选择器)Channel Selector是Agent的组件,用于选择数据应该传输到哪个Channel。
Flume提供了多种类型的Channel Selector,如Replicating Channel Selector、Multiplexing Channel Selector 等,用于实现数据的复制、分发等功能。
6. Interceptor(拦截器)Interceptor是Agent的组件,用于对数据进行预处理和过滤。
flume checkpoint原理
flume checkpoint原理Flume Checkpoint原理Flume是Apache基金会下的一个分布式、可靠的、可扩展的日志收集和聚合系统。
它的设计目标是高效地从多个数据源(如Web 服务器、应用程序日志等)收集大量数据,并将数据传输到各种目标(如HDFS、HBase、Kafka等)。
在Flume中,Checkpoint是一个非常重要的概念,它确保了数据的可靠传输和故障恢复。
Checkpoint是Flume用于确保数据传输的可靠性和一致性的机制。
当数据从源头开始流动时,Flume会周期性地将数据写入到一个称为“Channel”的缓冲区。
Channel是一个可靠的、持久化的、有序的队列,它在Flume Agent的两个组件之间传输数据。
为了确保数据的可靠传输,Flume将数据写入到Channel后,会生成一个Checkpoint,用于记录数据的传输状态。
在Flume中,Checkpoint是由一个称为“Transaction”的概念来实现的。
一个Transaction代表了一次数据传输的过程,它包含了一系列的事件(Event)。
当Flume将数据写入到Channel时,它会创建一个新的Transaction,并将数据写入到该Transaction中。
当数据写入完成后,Flume会提交该Transaction,将数据从Channel中删除,并生成一个Checkpoint来记录该Transaction 的状态。
Checkpoint的生成和管理是由Flume Agent的另一个组件称为“Sink”来完成的。
Sink负责将数据从Channel中读取出来,并将数据传输到目标存储系统。
在读取数据之前,Sink会先检查Checkpoint的状态,以确定从哪个位置开始读取数据。
如果发现有未提交的Transaction,Sink会首先将这些未提交的Transaction 提交,并将数据写入到目标存储系统。
详细图解使用Flume进行数据的实时收集处理
详细图解使用Flume进行数据的实时收集处理/anquan/wlgf/2014/0525/10454.html在已经成功安装Flume的基础上,本文将总结使用Flume进行数据的实时收集处理,具体步骤如下:第一步,在$FLUME_HOME/conf目录下,编写Flume的配置文件,命名为flume_first_conf,具体内容如下:#agent1表示代理名称agent1.sources=source1agent1.sinks=sink1agent1.channels=channel1#Spooling Directory是监控指定文件夹中新文件的变化,一旦新文件出现,#就解析该文件内容,#然后写入到channle。
写入完成后,标记该文件已完成或者删除该文件。
#配置source1agent1.sources.source1.type=spooldiragent1.sources.source1.spoolDir=/home/yujianxin/hmbbs #配置往channel1传输数据agent1.sources.source1.channels=channel1agent1.sources.source1.fileHeader = falseagent1.sources.source1.interceptors = i1agent1.sources.source1.interceptors.i1.type = timestamp#配置channel1agent1.channels.channel1.type=fileagent1.channels.channel1.checkpointDir=/home/yujianxin/ hmbbs/hmbbs_tmp123agent1.channels.channel1.dataDirs=/home/yujianxin/hmbb s/hmbbs_tmp#配置sink1agent1.sinks.sink1.type=hdfsagent1.sinks.sink1.hdfs.path=hdfs://slave3:9000/hmbbsagent1.sinks.sink1.hdfs.fileType=DataStreamagent1.sinks.sink1.hdfs.writeFormat=TEXTagent1.sinks.sink1.hdfs.rollInterval=1#配置从channel1接收数据agent1.sinks.sink1.channel=channel1#配置文件写入HDFS后的前缀agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d第二步,编写Shell脚本,执行Flume任务vi flume1.sh#!/bin/sh flume-ng agent -n agent1 -c conf-f /home/yujianxin/flume/apache-flume-1.4.0-bin/conf/flume_first_conf-Dflume.root.logger=DEBUG,console >./flume1.log 2>&1 &让日志收集任务以后台进程运行,且将运行日志重定向到 ./flume1.log 保存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Flume简介
flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统核心概念:
Agent:一个agent就是一个JVM进程,一个agent中包含多个sources和sinks。
Client:生产数据。
Source:从Client收集数据,传递给Channel。
Channel:主要提供一个队列的功能,对source提供中的数据进行简单的缓存。
Sink:从Channel收集数据,运行在一个独立线程。
Events:可以是日志记录、avro对象等。
基本结构:
Flume以agent为最小的独立运行单位。
单agent由Source、Sink和Channel 三大组件构成,如下图:
复杂结构:
Flume agent可以根据需求配置成多种形式的拓扑结构Agent顺序连接
Agent联合
多路复用
网络流:
Flume支持Avro、Thrift、Syslog、Netcat流数据采集Source
表1 Source类型
Avro Source
接收Avro Client的流数据,客户端与采集端需要统一序列化模板主要参数配置
其中threads决定最多有多少个线程来处理RPC请求
源码分析
通过ty实现,启动一个Netty Server来提供RPC服务socketChannelFactory:主要负责生产网络通信相关的Channel和ChannelSink实例,NIO Server端一般使用NioServerSocketChannelFactory,用户也可以定制自己的ChannelFactory。
pipelineFactory:主要用来对传输数据的处理,由于对数据的处理属于业务相关,用户应自己实现ChannelPipelineFactory,然后往ChannelPipelineFactory添加自定义的Handler
启动Netty的Server端时都会设置两个ExecutorService对象,我们都习惯用boss,worker两个变量来引用这两个对象。
在Netty的里面有一个Boss,他开了一家公司(开启一个服务端口)对外提供业务服务,它手下有一群做事情的workers。
Boss一直对外宣传自己公司提供的业务,并且接受(accept)有需要的客户(client),当一位客户找到Boss说需要他公司提供的业务,Boss便会为这位客户安排一个worker,这个worker全程为这位客户服务(read/write)。
如果公司业务繁忙,一个worker可能会为多个客户进行服务。
Socket2
Socket3
Spooling Directory Source
监测配置的目录下新增的文件,并将文件中的数据读取出来。
需要注意两点:拷贝到spool目录下的文件不可以再打开编辑;不具备目录递归功能。
另外需要一个程序对监测目录定期维护,如:备份文件、删除错误文件等。
主要参数配置
spoolDir:监听目录
deletePolicy:当文件中数据全部读取到channel后,源文件处理(立即删除或者重命名)
batchSize:source缓存大小
deserializer:序列化,默认按行划分event,可自定义序列化规则Channel
表2 Channel类型
Channel说明
MemoryChannel: 所有的events被保存在内存中。
优点是高吞吐。
缺点是容量有限并且Agent死掉时会丢失内存中的数据。
FileChannel: 所有的events被保存在文件中。
优点是容量较大且死掉时数据可恢复。
缺点是速度较慢。
上述两种Channel,优缺点相反,分别有自己适合的场景。
然而,对于大部分应用来说,我们希望Channel可以同提供高吞吐和大缓存。
美团开发DualChannel:
DualChannel:基于MemoryChannel和FileChannel开发。
当堆积在Channel中的events数小于阈值时,所有的events被保存在MemoryChannel 中,Sink从MemoryChannel中读取数据;当堆积在Channel中的events 数大于阈值时,所有的events被自动存放在FileChannel中,Sink从FileChannel中读取数据。
这样当系统正常运行时,我们可以使用MemoryChannel的高吞吐特性;当系统有异常时,我们可以利用FileChannel 的大缓存的特性。
多路复用
一种是用来复制(Replication),另一种是用来分流(Multiplexing)。
Replication方式,可以将最前端的数据源复制多份,分别传递到多个channel 中,每个channel接收到的数据都是相同的。
Multiplexing方式是根据特定类型分流,每个channel中数据是不同的,适合做类型区分。
Sink
表3 Sink类型
HDFS Sink
把events写入HDFS中,目前支持文本文件和SequenceFile,同时支持数据压缩。
文件可以根据运行时间、消息数目和文件大小同时作用来控制文件关闭和新建。
主要参数配置
hdfs.path:路径
hdfs.rollInterval:多长时间新建文件
hdfs.rollSize:多大时新建文件
hdfs.rollCount:有多少条消息时新建文件
hdfs.batchSize:批量写入hdfs的event个数
hdfs.fileType:文件类型,支持SequenceFile、DataStream和CompressedStream
hdfs.threadsPoolSizeflume:操作hdfs的线程数(包括新建,写入等)Kafka Sink
可以把数据发布到一个Kafka topic,有效得整合Flume与Kafka
主要参数配置
topic:对应Kafka的topic
batchSize:批量写入Kafka的event个数
Other Kafka Producer Properties:其它Kafka参数
内部负载均衡
负载均衡片处理器提供在多个Sink之间负载平衡的能力。
实现支持通过round_robin(轮询)或者random(随机)参数来实现负载分发,默认情况下使用round_robin,但可以通过配置覆盖这个默认值。
还可以通过集成AbstractSinkSelector类来实现用户自己的选择机制。
故障转移
FailoverSink Processor会通过配置维护了一个优先级列表。
保证每一个有效的事件都会被处理。
故障转移的工作原理是将连续失败sink分配到一个池中,在那里被分配一个冷冻期,在这个冷冻期里,这个sink不会做任何事。
一旦sink成功发送一个event,sink将被还原到live 池中。
在这配置中,要设置sinkgroups processor为failover,需要为所有的sink 分配优先级,所有的优先级数字必须是唯一的,这个得格外注意。
此外,failover time的上限可以通过maxpenalty 属性来进行设置。
flume集群管理
flume监控
Flume本身提供了http, ganglia的监控服务,而目前主要使用zabbix做监控。
另一方面,净化Flume的metrics。
只将我们需要的metrics发送给zabbix,避免zabbix server造成压力。
表4 可监控指标(metrics)。