一、Flume介绍 Flume Apache Flume是一个分布式,高可用可靠的服务,能够高效的收集并聚合大量日志数据,它基于流式数据流的结构,能够将数据写入多种数据接收方。
二、几个重要概念 1.Event 事件是Flume数据传输的基本数据单位,它携带着数据信息。 2.Agent Flume包含一个或者多个Agent,可以把Agent当做一个独立的进程,它的主要作用就是从客户端接收数据,并将数据传给下一个目标节点。 3.Source Source是Agent中的一员,它主要用来从数据发生方接收数据,并将数据发送到一个或者多个Channel。 4.Channel 也是Agent中的一员,我们可以把Channel看作是一处缓存,它用来暂存Source发送过来的数据,等着这些数据被Sink消费。 5.Sink 也是Agent中的一员,Source和Sink中间由Channel作为桥梁,Sink将Channel中的数据传递到我们所需的目的地,目的地可以是Kafka、HBASE、HDFS等等。
三、Flume的插件 1.Interceptors Flume自己的拦截器,在Source向Channel进行发送中,拦截器用来进行数据的校验或者也可以对数据进行更改。 2.Channels Selectors 可以在Source发送数据前对使用哪个Channel进行选择;管道又分为两种,一是默认的即每一个管道都传递相同的事件数据。二是根据事件自带的信息来进行管道选择。 3.Sink 用来激活Sinks群中的某个Sink,可以进行负载均衡控制。
四、Flume组件的配置 1. Source Source有很多类型,这里只说较常见常用的五种 (1). AVro Source 指Flume通过Avro方式在两台机器之间进行数据传输,即监听和收集指定的端口的日志,同时需要提供给Source被监听的主机IP。以下为Avro Source配置的示例,红框内的配置项为必填。
a1.sources = r1
a1.channels = c1
a1.sources.r1.type = avro
a1.sources.r1.channels = c1
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 4141
(2). Exec Source 该种类型就是通过命令操作来进行数据的读取,比如常用的就是用tail -f shell命令来读取日志文件,以下为Exec Source配置的示例。
a1.sources = r1
a1.channels = c1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /var/log/secure
a1.sources.r1.channels = c1
(3). Spooling-directory Source 如果说上面的Exec Source类型是读取日志文件的形式,那么则可以说Spooling-directory Source类型与它类似,即是读取文件夹的形式,准确的说应该是读取指定文件夹下的日志文件。该Source会对指定文件夹进行监视,在文件夹下产生新文件时对其进行读取,同时当一个文件被完全读完之后,Source会对该文件进行删除或记标记(重命名)。以下为Spooling-directory Source配置的示例。
a1.channels = ch-1
a1.sources = src-1
a1.sources.src-1.type = spooldir
a1.sources.src-1.channels = ch-1
a1.sources.src-1.spoolDir = /var/log/flume
a1.sources.src-1.fileHeader = true
(4). Syslog Source Syslog Source可以通过Syslog协议读取系统日志,在指定ip地址和端口后可以采集数据源为Syslogudp和 Syslogtcp两种的日志信息。以下为Syslog Source配置的示例。
a1.sources = r1
a1.channels = c1
a1.sources.r1.type = syslogtcp
a1.sources.r1.port = 5140
a1.sources.r1.host = localhost
a1.sources.r1.channels = c1
(5). Kafka Source Kafka Source就是一个Apache Kafka消费者,它从Kafka的topic中读取消息。 如果运行了多个Kafka Source,则可以把它们配置到同一个消费者组,以便每个source都读取一组唯一的topic分区。以下为Kafka Source配置的示例。
tier1.sources.source1.type = org.apache.flume.source.kafka.KafkaSource
tier1.sources.source1.channels = channel1
tier1.sources.source1.batchSize = 5000
tier1.sources.source1.batchDurationMillis = 2000
tier1.sources.source1.kafka.bootstrap.servers = localhost:9092
tier1.sources.source1.kafka.topics = test1, test2
tier1.sources.source1.kafka.consumer.group.id = custom.g.id
2.Channel Flume的Channel中最主要也最常见的类型就是Memory channel,不过也有很多其他类型的Channel,比如Kafka channel将Event缓存在Kafka,JDBC channel将Event持久化等等。在Memory channel中可以设置管道的缓存容量以及数据的阈值等参数。以下为Memory Source配置的示例。
a1.channels = c1
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000
a1.channels.c1.byteCapacityBufferPercentage = 20
a1.channels.c1.byteCapacity = 800000
3.Sink Sink也有多种类型,我们在这里也只说五种 (1). Avro Sink Avro Sink的特点是可以将接收到的日志数据发送到指定端口,可提供给下一节点的Agent或者组件应用, 这种方式在使用时也需要指定ip和端口。以下为Avro Sink配置的示例。
a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = avro
a1.sinks.k1.channel = c1
a1.sinks.k1.hostname = 10.10.10.10
a1.sinks.k1.port = 4545
(2). Logger Sink Logger Sink用于记录INFO级别日志的汇聚点,即将收集到的日志写到Flume的Log中,该种Sink简单常用, 一般用于调试。以下为Logger Sink配置的示例。
a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = logger
a1.sinks.k1.channel = c1
(3). File_roll Sink File_roll Sink可以将一定时间内收集到的日志写到一个指定的文件中,用户指定一个文件夹和一个周期 ,再启动Flume后会有一个文件写入该文件夹,此周期内收集到的日志将全被写入该文件。以此,在一周期后会有新的文件写入。以下为File_roll Sink配置的示例。
a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = file_roll
a1.sinks.k1.channel = c1
a1.sinks.k1.sink.directory = /var/log/flume
(4). Kafka Sink Kafka Sink可以把数据发送到Kafka,也就是将Flume 与Kafka 集成。Flume1.8不再支持Kafka 0.9.x(不包括0.9.x)以前的版本。以下为Kafka Sink配置的示例。
a1.sinks.k1.channel = c1
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic = mytopic
a1.sinks.k1.kafka.bootstrap.servers = localhost:9092
a1.sinks.k1.kafka.flumeBatchSize = 20
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.kafka.producer.linger.ms = 1
a1.sinks.k1.kafka.producer.compression.type = snappy
(5). HDFS Sink HDFS Sink会将Event写入HDFS,可以根据写入的时间、文件大小或Event数量定期滚动文件(关闭当前文件并创 建新文件)。它还可以根据Event自带的时间戳或系统时间等属性对数据进行分区。使用HDFS Sink需要安装hadoop环境, 以便Flume可以使用Hadoop的客户端与HDFS集群进行通信。以下为HDFS Sink配置的示例。
a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
以上就是从Flume的介绍到组件配置的全部讲解,下一节介绍Flume的安装部署。
|