前提

已完成Kafka的搭建,具体步骤参照CentOS7搭建Kafka单机环境及基础操作

Flume安装

下载
wget http://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.6.0/apache-flume-1.6.0-bin.tar.gz
解压
tar -zxvf apache-flume-1.6.0-bin.tar.gz
移动文件夹
mv apache-flume-1.6.0-bin /usr/local/hadoop/
配置
cd /usr/local/hadoop/apache-flume-1.6.0-bin/conf
vim flume.conf
agent1.sources=r1
agent1.channels=c1
agent1.sinks=k1 agent1.sources.r1.type=exec
agent1.sources.r1.command=tail -F /usr/words.txt
agent1.sources.r1.channels=c1 agent1.channels.c1.type=memory
agent1.channels.c1.capacity=10000
agent1.channels.c1.transactionCapacity=100 agent1.sinks.k1.type=org.apache.flume.sink.kafka.KafkaSink
agent1.sinks.k1.topic=test
agent1.sinks.k1.brokerList=192.168.174.200:9092
agent1.sinks.k1.requiredAcks=1
agent1.sinks.k1.batchSize=20
agent1.sinks.k1.channel=c1
其中192.168.174.200:9092为kafka监听,test为主题
启动
bin/flume-ng agent --conf conf --conf-file conf/flume.conf --name agent1 -Dflume.root.logger=INFO,console

注意:--name agent1与flume.conf中的agent1一致

利用python动态生成words.txt中的内容
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
import random
# 打开一个文件
for num in range(1,2000):
time.sleep(3)
fo = open("/usr/words.txt", "a+")
a = random.randint(1, 254)
if a >= 200:
fo.write( "out"+'\n')
else:
fo.write( "join"+'\n')
# 关闭打开的文件
fo.close()

启动kafka的consumer对数据进行监听
./kafka-console-consumer.sh --zookeeper 192.168.174.200:2181,192.168.174.201:2181 --topic test



概念与名词解释

1.source

flume提供多种source供用户进行选择,尽可能多的满足大部分日志采集的需求,常用的source的类型包括avro、exec、netcat、spooling-directory和syslog等。具体的使用范围和配置方法详见source. 

2.channel

flume中的channel不如source和sink那么重要,但却是不可忽视的组成部分。常用的channel为memory-channel,同时也有其他类型的channel,如JDBC、file-channel、custom-channel等,详情见channel. 

3.sink

flume的sink也有很多种,常用的包括avro、logger、HDFS、hbase以及file-roll等,除此之外还有其他类型的sink,如thrift、IRC、custom等。具体的使用范围和使用方法详见sink. 

Flume处理日志 
Flume不止可以采集日志,还可以对日志进行简单的处理,在source处可以通过interceptor对日志正文处的重要内容进行过滤提取,在channel处可以通过header进行分类,将不同类型的日志投入不同的通道中,在sink处可以通过正则序列化来将正文内容进行进一步的过滤和分类。 

Flume Source Interceptors 
Flume可以通过interceptor将重要信息提取出来并且加入到header中,常用的interceptor有时间戳、主机名和UUID等,用户也可以根据个人需求编写正则过滤器,将某些特定格式的日志内容过滤出来,以满足特殊需求。 

Flume Channel Selectors 
Flume可以根据需求将不同的日志传输进不同的channel,具体方式有两种:复制和多路传输。复制就是不对日志进行分组,而是将所有日志都传输到每个通道中,对所有通道不做区别对待;多路传输就是根据指定的header将日志进行分类,根据分类规则将不同的日志投入到不同的channel中,从而将日志进行人为的初步分类。 

Flume Sink Processors 
Flume在sink处也可以对日志进行处理,常见的sink处理器包括custom、failover、load balancing和default等,和interceptor一样,用户也可以根据特殊需求使用正则过滤处理器,将日志内容过滤出来,但和interceptor不同的是在sink处使用正则序列化过滤出的内容不会加入到header中,从而不会使日志的header显得过于臃肿。 

附录

常见的source 

avro source

avro可以监听和收集指定端口的日志,使用avro的source需要说明被监听的主机ip和端口号,下面给出一个具体的例子: 

  1. a1.sources = r1
  2. a1.channels = c1
  3. a1.sources.r1.type = avro
  4. a1.sources.r1.channels = c1
  5. a1.sources.r1.bind = 0.0.0.0
  6. a1.sources.r1.port = 4141
exec source

exec可以通过指定的操作对日志进行读取,使用exec时需要指定shell命令,对日志进行读取,下面给出一个具体的例子: 

  1. a1.sources = r1
  2. a1.channels = c1
  3. a1.sources.r1.type = exec
  4. a1.sources.r1.command = tail -F /var/log/secure
  5. a1.sources.r1.channels = c1
spooling-directory source

spo_dir可以读取文件夹里的日志,使用时指定一个文件夹,可以读取该文件夹中的所有文件,需要注意的是该文件夹中的文件在读取过程中不能修改,同时文件名也不能修改。下面给出一个具体的例子: 

  1. agent-1.channels = ch-1
  2. agent-1.sources = src-1
  3. agent-1.sources.src-1.type = spooldir
  4. agent-1.sources.src-1.channels = ch-1
  5. agent-1.sources.src-1.spoolDir = /var/log/apache/flumeSpool
  6. agent-1.sources.src-1.fileHeader = true
syslog source

syslog可以通过syslog协议读取系统日志,分为tcp和udp两种,使用时需指定ip和端口,下面给出一个udp的例子: 

  1. a1.sources = r1
  2. a1.channels = c1
  3. a1.sources.r1.type = syslogudp
  4. a1.sources.r1.port = 5140
  5. a1.sources.r1.host = localhost
  6. a1.sources.r1.channels = c1

常见的channel

Flume的channel种类并不多,最常用的是memory channel,下面给出例子: 

  1. a1.channels = c1
  2. a1.channels.c1.type = memory
  3. a1.channels.c1.capacity = 10000
  4. a1.channels.c1.transactionCapacity = 10000
  5. a1.channels.c1.byteCapacityBufferPercentage = 20
  6. a1.channels.c1.byteCapacity = 800000

常见的sink

logger sink

logger顾名思义,就是将收集到的日志写到flume的log中,是个十分简单但非常实用的sink 

avro sink

avro可以将接受到的日志发送到指定端口,供级联agent的下一跳收集和接受日志,使用时需要指定目的ip和端口:例子如下: 

  1. a1.channels = c1
  2. a1.sinks = k1
  3. a1.sinks.k1.type = avro
  4. a1.sinks.k1.channel = c1
  5. a1.sinks.k1.hostname = 10.10.10.10
  6. a1.sinks.k1.port = 4545
file roll sink

file_roll可以将一定时间内收集到的日志写到一个指定的文件中,具体过程为用户指定一个文件夹和一个周期,然后启动agent,这时该文件夹会产生一个文件将该周期内收集到的日志全部写进该文件内,直到下一个周期再次产生一个新文件继续写入,以此类推,周而复始。下面给出一个具体的例子: 

  1. a1.channels = c1
  2. a1.sinks = k1
  3. a1.sinks.k1.type = file_roll
  4. a1.sinks.k1.channel = c1
  5. a1.sinks.k1.sink.directory = /var/log/flume
hdfs sink

hdfs与file roll有些类似,都是将收集到的日志写入到新创建的文件中保存起来,但区别是file roll的文件存储路径为系统的本地路径,而hdfs的存储路径为分布式的文件系统hdfs的路径,同时hdfs创建新文件的周期可以是时间,也可以是文件的大小,还可以是采集日志的条数。具体实例如下: 

  1. a1.channels = c1
  2. a1.sinks = k1
  3. a1.sinks.k1.type = hdfs
  4. a1.sinks.k1.channel = c1
  5. a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S
  6. a1.sinks.k1.hdfs.filePrefix = events-
  7. a1.sinks.k1.hdfs.round = true
  8. a1.sinks.k1.hdfs.roundValue = 10
  9. a1.sinks.k1.hdfs.roundUnit = minute
hbase sink

hbase是一种数据库,可以储存日志,使用时需要指定存储日志的表名和列族名,然后agent就可以将收集到的日志逐条插入到数据库中。例子如下: 

  1. a1.channels = c1
  2. a1.sinks = k1
  3. a1.sinks.k1.type = hbase
  4. a1.sinks.k1.table = foo_table
  5. a1.sinks.k1.columnFamily = bar_cf
  6. a1.sinks.k1.serializer = org.apache.flume.sink.hbase.RegexHbaseEventSerializer
  7. a1.sinks.k1.channel = c1

CentOS7搭建Flume与Kafka整合及基础操作与测试的更多相关文章

  1. flume与kafka整合

    flume与kafka整合 前提: flume安装和测试通过,可参考:http://www.cnblogs.com/rwxwsblog/p/5800300.html kafka安装和测试通过,可参考: ...

  2. ambari下的flume和kafka整合

    1.配置flume #扫描指定文件配置 agent.sources = s1 agent.channels = c1 agent.sinks = k1 agent.sources.s1.type=ex ...

  3. Flume和Kafka整合安装

    版本号: RedHat6.5   JDK1.8    flume-1.6.0   kafka_2.11-0.8.2.1 1.flume安装 RedHat6.5安装单机flume1.6:http://b ...

  4. flume和kafka整合(转)

    原文链接:Kafka flume 整合 前提 前提是要先把flume和kafka独立的部分先搭建好. 下载插件包 下载flume-kafka-plus:https://github.com/beyon ...

  5. Flume 学习笔记之 Flume NG+Kafka整合

    Flume NG集群+Kafka集群整合: 修改Flume配置文件(flume-kafka-server.conf),让Sink连上Kafka hadoop1: #set Agent name a1. ...

  6. Centos7 搭建 Flume 采集 Nginx 日志

    版本信息 CentOS: Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x ...

  7. 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合

    前一篇中数据源采用的是从一个socket中拿数据,有点属于“旁门左道”,正经的是从kafka等消息队列中拿数据! 主要支持的source,由官网得知如下: 获取数据的形式包括推送push和拉取pull ...

  8. CentOS7搭建Hadoop2.8.0集群及基础操作与测试

    环境说明 示例环境 主机名 IP 角色 系统版本 数据目录 Hadoop版本 master 192.168.174.200 nameNode CentOS Linux release 7.4.1708 ...

  9. 【Kafka】Kafka集群基础操作!新手上路必备~

    目录 bin目录 Topic命令概览 创建Topic 查看Topic 描述Topic Producer生产数据 Consumer消费数据 增加topic分区数 增加配置 删除配置 删除Topic 所有 ...

随机推荐

  1. STM32内部硬核的认识

    STM32内部含有硬核,对于一些协议(例如:UART,SPI,IIC,CRC等)我们只要调用硬核就可以了,同时我们也可以自己写通信协议. 这些硬核最终肯定是要有引脚输出的,这就是为什么STM32的引脚 ...

  2. 10分钟学会React Context API

    Create-react-app来学习这个功能: 注意下面代码红色的即可,非常简单. 在小项目里Context API完全可以替换掉react-redux. 修改app.js import React ...

  3. Socket网络通信编程(一)

    1.学习基本概念.传统的同步阻塞式I/O编程.伪异步IO实现 2.学习基于NIO的同步非阻塞式编程 3.了解基于NIO2.0的异步非阻塞(AIO)编程 1.1 基本概念 Socket又称“套接字”,应 ...

  4. Bazinga

    Bazinga Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  5. equals深入理解

    package cn.galc.test; public class TestEquals { public static void main(String[] args) { /** * 这里使用构 ...

  6. Xcode磁盘空间清理

    http://www.iwangke.me/2013/09/09/clean-xcode-to-free-up-disk-space/#jtss-tsina 这个目录下面的文件也可以隔一段儿时间清理一 ...

  7. 北风设计模式课程---接口分离原则(Interface Segregation Principle)

    北风设计模式课程---接口分离原则(Interface Segregation Principle) 一.总结 一句话总结: 接口分离原则描述为 "客户类不应被强迫依赖那些它们不需要的接口& ...

  8. python写一个查询接口

    知识点: 1.flask_sqlalchemy查询: Flask-SQLAlchemy 在您的 Model 类上提供了 query 属性.当您访问它时,您会得到一个新的所有记录的查询对象.在使用 al ...

  9. DRF的路由生成类的使用

    DRF路由生成类的使用 对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST framework ...

  10. SpringBoot 切换国际化

    git:https://github.com/xiaozhuanfeng/demoProj 代码结构: application.properties: spring.messages.basename ...