flume入门案例

flume简单介绍

官网的一句话:Flume is a distributed, reliable, and available system for efficiently collecting, aggregating, and moving large amounts of log data from many different sources to a centralized data store.

翻译:Flume是一个能有效地采集,汇总和移动大量的来自不同来源的日志数据并进行集中存储的分布式的、可靠的和可用的系统。

The use of Apache Flume is not only restricted to log data aggregation. Since data sources are customizable, Flume can be used to transport massive quantities of event data including but not limited to network traffic data, social-media-generated data, email messages and pretty much any data source possible.

Apache Flume的使用不局限于日志数据聚合。由于数据源是可定制的,flume可以用来传输大量的事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息和几乎任何数据源。

本文档使用的apache-flume-1.8.0-bin版本

系统要求

  • Java8或更高版本
  • 足够的内存空间(sources, channels or sinks)
  • 足够的磁盘空间(channels or sinks)
  • 文件夹的权限(agent 对文件夹的读写权限)

特点

  • 复杂流动
  • 可靠性
  • 可恢复性
  • 在配置文件中使用环境变量 1、在启动脚本中,添加以下参数 -DpropertiesImplementation=org.apache.flume.node.EnvVarResolverProperties 2、在 conf/flume-env.sh文件中添加变量
  • 支持 zookeeper 配置
  • 支持第三方插件 在启动flume时,会加载FLUME_HOME/plugins.d的目录。

flume搭建

flume采用的是一种开箱即用的部署方式,但是对于他的一些默认参数的设置会比较小,我们需要对一些参数进行一些修改。

我们只修改bin/flume-ng和conf/flume-env.sh两个文件。

  1. 修改bin/flume-ng文件 修改该文件的225行:JAVA_OPTS="-Xmx1024m" ,默认是 20

    如果想要配置远程debug调试将该行配置修改为:

     JAVA_OPTS="-Xmx2048m -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=y"
    
    
  2. 修改 conf/flume-env.sh 文件 将conf目录下的flume-env.sh.template 文件重命名为:flume-env.sh , 并修改该文件的以下配置:

     export JAVA_OPTS="-Xms1024m -Xmx1024m -Dcom.sun.management.jmxremote"
    
    

简单入门案例

  1. 在FLUME_HOME目录下创建一个otherconf目录,名称任意,用于存放我们编写的一些配置文件。

  2. 在新建的otherconf目录下创建一个example.conf的配置文件,名称任意。

  3. 在新建的example.conf文件中添加以下几行配置代码

     # Name the components on this agent
     a1.sources = r1
     a1.sinks = k1
     a1.channels = c1
    
     # Describe/configure the source
     a1.sources.r1.type = seq
    
     # Use a channel which buffers events in memory
     a1.channels.c1.type = memory
     a1.channels.c1.capacity = 1000
     a1.channels.c1.transactionCapacity = 100
    
     # Describe the sink
     a1.sinks.k1.type = file_roll
     a1.sinks.k1.sink.directory = D:/flume-test
    
     # Bind the source and sink to the channel
     a1.sources.r1.channels = c1
     a1.sinks.k1.channel = c1
    
    
  4. 启动flume服务

    在启动之前 一定要先将我们配置的目录创建出来,否则会抛出找不到目录的错误。

    进入到FLUME_HOME目录下,执行以下命令。

     windows下的启动命令:
     .\bin\flume-ng.cmd agent --conf conf --conf-file otherconf\example.conf --name a1 -property flume.root.logger=INFO,console
    
     Linux下的启动命令:
     ./bin/flume-ng agent --conf conf --conf-file otherconf/example.conf --name a1  -Dflume.root.logger=INFO,console
    
    

    数据提取

    flume支持许多种从外部source提取数据的机制

  5. RPC

  6. Executing commands (执行命令)

  7. Network streams (网络流)

      Avro
      Thrift
      Syslog
      Netcat
    
    

    数据多级流动

      为了使数据流动到多个agent或者是hop中,前端agent的sink和后端agent的source需要设置成avro类型,并且source要指向sink的ip和端口。
    
    

在代理中添加多个流

# list the sources, sinks and channels in the agent
agent_foo.sources = avro-AppSrv-source1 exec-tail-source2
agent_foo.sinks = hdfs-Cluster1-sink1 avro-forward-sink2
agent_foo.channels = mem-channel-1 file-channel-2

# flow #1 configuration
agent_foo.sources.avro-AppSrv-source1.channels = mem-channel-1
agent_foo.sinks.hdfs-Cluster1-sink1.channel = mem-channel-1

# flow #2 configuration
agent_foo.sources.exec-tail-source2.channels = file-channel-2
agent_foo.sinks.avro-forward-sink2.channel = file-channel-2

扇入扇出

扇入即表示多个source同时向一个channel中发送数据 扇出即表示一个source同时向多个channel中发送数据 扇出有两种模式:复制和复用 复制即一份数据轮询发送到多个channel中 复用可以对数据进行选择性的发送,根据配置中的选择器的值进行对channel的选择,如果匹配不到,就会发送到默认的选择器中。而且每个选择器也可以配置多个channel。

list the sources, sinks and channels in the agent

agent_foo.sources = avro-AppSrv-source1
agent_foo.sinks = hdfs-Cluster1-sink1 avro-forward-sink2
agent_foo.channels = mem-channel-1 file-channel-2

set channels for source

agent_foo.sources.avro-AppSrv-source1.channels = mem-channel-1 file-channel-2

set channel for sinks

agent_foo.sinks.hdfs-Cluster1-sink1.channel = mem-channel-1
agent_foo.sinks.avro-forward-sink2.channel = file-channel-2

channel selector configuration

agent_foo.sources.avro-AppSrv-source1.selector.type = multiplexing
agent_foo.sources.avro-AppSrv-source1.selector.header = State
agent_foo.sources.avro-AppSrv-source1.selector.mapping.CA = mem-channel-1
agent_foo.sources.avro-AppSrv-source1.selector.mapping.AZ = file-channel-2
agent_foo.sources.avro-AppSrv-source1.selector.mapping.NY = mem-channel-1 file-channel-2
agent_foo.sources.avro-AppSrv-source1.selector.default = mem-channel-1

以上的案例中使用了复用的模式对avro-AppSrv-source1进行了处理,选择器对header为State的数据进行检查,如果为CA选择 mem-channel-1,如果AZ选择 file-channel-2,如果NY,选择两个,如果都不匹配选择默认的mem-channel-1。

selector也支持可选通道,配置如下:
agent_foo.sources.avro-AppSrv-source1.selector.optional.CA = mem-channel-1 file-channel-2

选择器会试图第一时间将数据写到需求channel和当这些channel中某些channel没法消费这些events时会停止这次事务。该事务会重新连接所有channel。一旦所有channel都在消费了所有events,那么选择器会试图将events写到备选channel中。备选channel消费event产生的失效会被简单地忽略和不再重试。

如果对于一个指定的header存在备选channel和需求channel的重叠,那么选择需求channel,并且当一个需求channel发生失效时将会引起所有需求channel的重试。举个例子,在上面的案例中,为header“CA”指定了一个需求channel mem-channel-1,尽管备选channel和需求channel都指定了,但是一旦需求channel发生失效,name会引起该选择器中所有channel的重试。

需要说明的是如果一个header没有指定任何需求channel,那么events会写到默认channel和试图写到备选channel中。如果没有指定需求channel,就算指定了备选channel,events还是会被写到默认channel中。如果没有指定需求channel和默认channel,选择器会说将events写到备选channel。在这些情况中,失效会被忽略。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容