日志收集框架Flume
概览
Apache Flume是一个分布式,可靠且可用的系统,用于有效地收集,聚合大量日志数据并将其从许多不同的源移动到集中式数据存储中。Apache Flume的使用不仅限于日志数据聚合。由于数据源是可定制的,因此Flume可用于传输大量事件数据,包括但不限于网络流量数据,社交媒体生成的数据,电子邮件消息以及几乎所有可能的数据源。
数据流模型
Flume事件定义为具有字节有效负载和可选字符串属性集的数据流单位。Flume代理是一个(JVM)进程,承载了组件,事件通过这些组件从外部源流到下一个目标(hop)。
Flume源使用由外部源(如Web服务器)传递给它的事件。外部源以目标Flume源可以识别的格式将事件发送到Flume。当Flume源收到事件时,它将事件存储到一个或多个通道中。通道是被动存储,可保留事件直到被Flume Sink消耗掉为止。接收器从通道中删除事件,并将其放入HDFS之类的外部存储库(通过Flume HDFS接收器),或将其转发到流中下一个Flume代理(下一跳)的Flume源。给定代理中的源和接收器与通道中上演的事件异步运行。
Flume允许用户建立多跳流程,其中事件在到达最终目的地之前会通过多个代理传播。即下一个Source的源可能是上一个sink的输出
设置代理Agent
Flume代理配置存储在本地配置文件中。这是遵循Java属性文件格式的文本文件。可以在同一配置文件中指定一个或多个代理的配置。配置文件包括代理中每个源,接收器和通道的属性,以及它们如何连接在一起以形成数据流。
设置单个组件
流中的每个组件(源,接收器或通道)都有一个名称,类型和特定于该类型和实例化的属性集。例如,Avro源需要一个主机名(或IP地址)和一个接收数据的端口号。一个内存通道可以具有最大队列大小(“容量”),并且HDFS接收器需要知道文件系统URI,创建文件的路径,文件旋转的频率(“ hdfs.rollInterval”)等。组件的所有此类属性都需要在托管Flume代理的属性文件中设置。
核心组件
- Source 收集
- Channel 聚集
- Sink 输出
Flume Source
-
Avro source
侦听Avro端口并从外部Avro客户端流接收事件。与另一个(以前的跃点)Flume代理上的内置Avro Sink配对时,它可以创建分层的集合拓扑
-
Thrift source
监听Thrift端口并接收来自外部Thrift客户端流的事件。与另一个(以前的跃点)Flume代理上的内置ThriftSink配对时,它可以创建分层的集合拓扑。可通过启用kerberos身份验证将节俭源配置为以安全模式启动。 agent-principal和agent-keytab是Thrift源用来验证kerberos KDC的属性
-
Exec source
Exec源代码在启动时运行给定的Unix命令,并期望该过程在标准输出上连续产生数据(除非将属性logStdErr设置为true,否则将直接丢弃stderr)。如果该过程由于某种原因而退出,则源也将退出,并且将不再产生任何数据。这意味着诸如cat [命名管道]或tail -F [file]之类的配置将产生期望的结果,而日期可能不会-前两个命令产生数据流,而后者则产生单个事件并退出。
-
JMS Source
JMS源从JMS目的地(如队列或主题)读取消息。作为一个JMS应用程序,它应该可以与任何JMS提供者一起工作,但是只在ActiveMQ中测试过
-
Kafka source
Kafka Source是Apache Kafka使用者,可从Kafka主题读取消息。如果您有多个运行的Kafka源,则可以