专栏首页爱编码认识Flume(一)

认识Flume(一)

本文主要介绍【Flume的架构和使用】

目标

  • 认识了解Flume。
  • 掌握Flume基本原理。

简介

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

运行要求

Java运行时环境:Java 1.8或更高版本。 内存:为源、通道或接收器使用的配置提供足够的内存。 磁盘空间:为通道或接收器使用的配置提供足够的磁盘空间。 目录权限:代理使用的目录的读写权限。

架构

Flume事件定义为具有字节负载和一组可选字符串属性的数据流单元。Flume代理是一个(JVM)进程,它承载事件从外部源流向下一个目标(hop)的组件。

image.png

Flume源使用外部源(如web服务器)交付给它的事件。外部源以目标Flume源可以识别的格式向Flume发送事件。例如,Avro Flume源可以用于从Avro客户端接收Avro事件,或者从Avro接收器发送事件的流中的其他Flume代理。类似的流可以使用一个节俭水槽源来定义,以从一个节俭水槽接收事件,或者从一个节约水槽Rpc客户机接收事件,或者从节约水槽协议生成的任何语言编写的节约水槽客户机接收事件。当Flume源接收到事件时,它将进行存储。

Flume允许用户构建多个跃点流,其中事件在到达最终目的地之前经过多个代理。它还允许扇入和扇出流、上下文路由和失败跳转的备份路由(故障转移)。

基础知识

概念

Agent主要由:source,channel,sink三个组件组成. Source: 从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channel,Flume提供多种数据接收的方式,比如Avro,Thrift,twitter1%等 Channel: channel是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着一共桥梁的作用,channal是一个完整的事务,这一点保证了数据在收发的时候的一致性. 并且它可以和任意数量的source和sink链接. 支持的类型有: JDBC channel , File System channel , Memort channel等. sink: sink将数据存储到集中存储器比如Hbase和HDFS,它从channals消费数据(events)并将其传递给目标地. 目标地可能是另一个sink,也可能HDFS,HBase.

关联关系

Agent(代理):Flume代理配置存储在本地配置文件中。这是一个遵循Java属性文件格式的文本文件。可以在同一个配置文件中指定一个或多个代理的配置。配置文件包括代理中的每个源、接收器和通道的属性,以及如何将它们连接在一起以形成数据流。

流中的每个组件(source, sink or channel)都有特定于类型和实例化的名称、类型和属性集。例如,Avro源需要主机名(或IP地址)和端口号来接收数据。内存通道可以具有最大队列大小(“容量”),而HDFS接收器需要知道文件系统URI、创建文件的路径、文件旋转的频率(“HDFS . rollinterval”)等。组件的所有这些属性都需要在宿主Flume代理的属性文件中设置。

Agent代理需要知道要加载哪些单独的组件,以及它们是如何连接的,以便组成流。这是通过列出代理中每个source、sink 和channel的名称来完成的,然后为每个sink 和source指定连接channel。例如,Agent代理通过一个名为file-channel的文件通道将事件从一个名为avroWeb的Avro源流到HDFS sink HDFS -cluster1。配置文件将包含这些组件的名称,并将文件通道作为avroWeb源和hdfs-cluster1接收器的共享通道。

Agent代理使用名为Flume -ng的shell脚本启动,该脚本位于Flume发行版的bin目录中。您需要在命令行中指定代理名称、配置目录和配置文件:

简单实例

在这里,我们给出一个配置文件示例,描述一个单节点Flume部署。此配置允许用户生成事件并随后将其记录到控制台。

# example.conf: A single-node Flume configuration

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

这个配置定义了一个名为a1的代理。a1有一个源监听端口44444上的数据,一个通道缓冲内存中的事件数据,还有一个接收器将事件数据记录到控制台。配置文件为各种组件命名,然后描述它们的类型和配置参数。一个给定的配置文件可以定义几个指定的代理;当启动给定的Flume进程时,将传递一个标志,告诉它要显示哪个命名代理。

启动模板:

$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

查看结果

$ telnet localhost 44444

最初的Flume终端将在日志消息中输出事件。

应用场景

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

最后

本人水平有限,欢迎各位建议以及指正。顺便关注一下公众号呗,会经常更新文章的哦。

本文分享自微信公众号 - 爱编码(ilovecode)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 图解 Java 垃圾回收机制,写得非常好!

    自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。

    美的让人心动
  • 详谈单例、饿汉、和懒汉模式

    私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。

    李红
  • 何为内存溢出,何为内存泄露

    内存泄漏定义(memory leak):一个不再被程序使用的对象或变量还在内存中占有存储空间。

    Java架构
  • 微信小程序+商城信息管理系统

    a 会员管理 b 会员等级 c 收货地址管理d 会员优惠劵 e 会员收藏 f 会员足迹

    程序源代码
  • Java代码质量检查

    又搞一边质量扫描插件,之前做过一遍,然后后面各种忽略,然后就放弃了,所以,应该寻找一种方法,循序渐进的实施。本次将实施一个基本的打包扫描方案,包含

    Ryan-Miao
  • 转角遇到爱_1,你不知道的Java

    一时无聊,在简书开一个文集,专门记录一些技术上的偏门知识,少用但有用的知识。也不知道该取什么名字,就叫转角遇到爱吧。

    大公爵
  • Java并发机制的底层实现原理之volatile应用,初学者误看!

      Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制...

    爱撸猫的杰
  • ArrayList 与 LinkedList 区别

    查看源码可以看到, RandomAccess 接口中什么都没有定义。所以,这就是个标识接口,标识那些实现了这个接口的类,具有随机访问的功能。

    happyJared
  • volatile 引用

    Java - Volatile reference object and its member fields visibility

    平凡的学生族
  • Android APK瘦身全面总结——如何从32.6M到13.6M

    之前我简单介绍了关于svg图片瘦身的问题,在公司,瘦身这个问题是我提出来的,所以这锅我背了。公司项目是32.6M,我给自己的要求就是低于20M。上周花了一个星期...

    Android技术干货分享

扫码关注云+社区

领取腾讯云代金券