初识flume

Posted 萧殄之家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识flume相关的知识,希望对你有一定的参考价值。

一、Overview

1. 简介

Apache Flume是一个分布式,可靠且可用的系统,用于有效地从许多不同的源收集,聚合和移动大量日志数据到集中式数据存储。

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


2. 数据流模型

二、Setup

1. 配置agent

Flume agent 的配置保存在一个本地的配置文件中,这是一个遵循 Java 配置文件格式的文本文件。我们可以在同一个配置文件中配置一个或者多个 agent(s),配置文件中包含每个 agent 的 source 、sink 和 channel 属性,已经它们之间如何连接(wired)在一起来形成数据流。


2. 配置 agent 中的单个组件


3. 连接这些组件

agent 需要知道要加载哪些单独的组件,以及它们如何连接起来形成数据流。这是通过列出agent中的每个 source、sink 和 channel 的名称来完成的,配置文件中需要为每个 source 和 sink 指定连接的 channel 。比如,一个 agent 将 events 从一个叫做 avroWeb 的 Avro source, 经过名称为file-channel 的 channel 传递到叫做 hdfs-cluster1 的 HDFS sink,在配置文件中要包含这些组件的名称,并且将 file-channel 作为共享的 channel,连接到 avroWEb source 和 hdfs-cluster1 sink 上。


4. 开启 agent

通过 shell 命令 flume-ng 来开启 agent,需要运行的脚本位于 flume 发行版的 bin 目录下。你需要指定 agent 的名称、配置目录和配置文件。


以下为一个简单实例:

这个例子给出一个配置文件示例,描述一个单节点的 flume 部署。这个配置文件可以让你生成 events,随后在控制台打印出 logs。

# example.conf: A single-node Flume configuration
# Name the components on this agenta1.sources = r1a1.sinks = k1a1.channels = c1
# Describe/configure the sourcea1.sources.r1.type = netcata1.sources.r1.bind = localhosta1.sources.r1.port = 44444
# Describe the sinka1.sinks.k1.type = logger
# Use a channel which buffers events in memorya1.channels.c1.type = memorya1.channels.c1.capacity = 1000a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channela1.sources.r1.channels = c1a1.sinks.k1.channel = c1

这个配置文件定义了一个名为 a1 的 agent, a1 的 source 监听着来自端口 44444 的数据,a1 的 channel 将 event 数据缓存在内存中, a1 的 sink 将 event 数据打印到控制台。这个配置文件给各种组件进行了命名,然后指定了它们的类型和配置参数。一个给定的配置文件可以定义多个命名 agents,当一个给定的 flume 进程启动时,flume 会传递一个标志(flag),告诉它要显示哪一个命名 agent。


我们可以用下面的命令启动 flume:

[/usr/local/Cellar/flume/1.8.0]$ flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

注意,在一个完整部署中,们通常会包括另外一个选项:--conf=<conf-dir><conf-dir>目录包括shell脚本flume-env.sh和一个log4j属性文件。在本例中,我们传递了一个 Java 选项,强制 flume 将日志输出至控制台,并且不使用自定义环境脚本。


重新打开一个终端,使用 telnet 连接本地 44444 端口,向 flume 发送 event:

[/usr/local/Cellar/flume/1.8.0]$ telnet localhost 44444Trying ::1...telnet: connect to address ::1: Connection refusedTrying 127.0.0.1...Connected to localhost.Escape character is '^]'.Hello nihao!OK


flume 收到 event:

[/usr/local/Cellar/flume/1.8.0]$.........2019-02-25 19:52:44,098 INFO source.NetcatSource: Source starting2019-02-25 19:52:44,126 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]2019-02-25 19:53:48,514 INFO sink.LoggerSink: Event: { headers:{} body: 48 65 6C 6C 6F 20 6E 69 68 61 6F 21 0D Hello nihao!. }

以上是关于初识flume的主要内容,如果未能解决你的问题,请参考以下文章

打怪升级之小白的大数据之旅(七十一)<Hadoop生态:初识Flume>

打怪升级之小白的大数据之旅(七十一)<Hadoop生态:初识Flume>

Flume_初识

初识flume

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段