前提

已完成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. [CF342C]Cupboard and Balloons 题解

    前言 博主太弱了 题解 这道题目是一个简单的贪心. 首先毋庸置疑,柜子的下半部分是要放满的. 于是我们很容易想到,分以下三种情况考虑: \[\small\text{请不要盗图,如需使用联系博主}\] ...

  2. ORB an efficient alternative to SIFT or SURF

    AbstractFeature matching is at the base of many computer vision problems, such as object recognition ...

  3. Amaze ui tree 刷新数据

    最近在做代码生成器,界面用的是Amaze ui ,但是在用tree的时候发现数据绑定不会自动更新,去百度.谷歌查也没有查到,没办法只能自己做一个demo 在这贴上效果图 demo 下载地址https: ...

  4. Mac下配置神器PhpStrom开发环境

    转载自:http://www.ifun.cc/blog/2014/02/09/macxia-pei-zhi-shen-qi-phpstromkai-fa-huan-jing/ php这么流行,不能不研 ...

  5. SpringBoot 集成 Spring Session

    SpringBoot 集成 Spring Session 应该讲解清楚,为什么要使用 Redis 进行 Session 的管理. Session 复制又是什么概念. Spring Session 在汪 ...

  6. 邻近双线性插值图像缩放的Python实现

    最近在查找有关图像缩放之类的算法,因工作中需要用到诸如此类的图像处理算法就在网上了解了一下相关算法,以及其原理,并用Python实现,且亲自验证过,在次与大家分享. 声明:本文代码示例针对的是plan ...

  7. EDM设计案例分享:6款引人入胜的夏日邮件营销模板分享

    夏日酷暑,清凉如风.在这个假期,旅游行业.酒店.服饰等都推出不少的假期活动,吸引游者的到来.假日期间,让我们看看一些旅游业.品牌服装店和酒店是怎么做好电子邮件广告的.在此,Focussend精心为大家 ...

  8. KVM/QEMU/qemu-kvm/libvirt 概念全解

    目录 目录 前言 KVM QEMU KVM 与 QEMU qemu-kvm Libvirt Libvirt 在 OpenStack 中的应用 前言 如果是刚开始接触虚拟机技术的话, 对上述的概念肯定会 ...

  9. Delphi XE2 之 FireMonkey 入门(1)

    Delphi XE2 的 FireMonkey 是跨平台的, 暂时只准备看看它在 Windows 下(我是 32 位 Win7)的应用情况. 很新的东西, 相信有了它, 以后的界面将会更灵活.漂亮, ...

  10. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第4节 ArrayList集合_18-练习三_按指定格式打印集合的方法

    主要锻炼用集合作为参数 使用if判断语句