热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flume入门及疑惑

背景Flume日志采集框架,使用默认的组件简单运行了一下。本文介绍sink使用file_roll的配置及疑惑。windows下命令语法下载压缩文件后解压到本地&

背景

Flume 日志采集框架,使用默认的组件简单运行了一下。
本文介绍 sink 使用 file_roll 的配置及疑惑。

windows 下命令语法

下载压缩文件后解压到本地,跟其他 Apache 项目一样,是一个二进制文件包,运行文件位于 bin 目录中,启动 agent 的语法如下:

flume-ng.cmd agent [OPTION]

OPTION 基础选项:

  1. --conf 配置文件所在的目录
  2. --config-file agent 启动的配置文件
  3. --name 需要启动的 agent 名称

配置一个 sink 为 file_role 的 demo

agent1.sinks.loggerSink.type = file_roll
agent1.sinks.loggerSink.sink.directory = E:/file_roll
agent1.sinks.loggerSink.sink.rollInterval = 0

这个配置项目,跟我理解的不太一样:

  1. directory 属性之前多了一个 sink 前缀,我理解的 directory 和 type 一样是同一等级的属性,初看以为配置写错了呢。
  2. directory 指定的是文件目录,且必须创建,如果不存在,flume 不会自行创建,程序后台报异常,但是控制台不会输出异常。

技术运用思考


  1. 是否支持集群部署呢?多 Agnet 和多路复用流。
  2. sinkgroup 跟单个 sink 的区别是什么?

为什么会有转发的需求呢?

官方有一个转发 flow 的配置案例:

To setup a multi-tier flow, you need to have an avro/thrift sink of first hop pointing to avro/thrift source of the next hop. This will result in the first Flume agent forwarding events to the next Flume agent. For example, if you are periodically sending files (1 file per event) using avro client to a local Flume agent, then this local agent can forward it to another agent that has the mounted for storage.

周期性的发送 webserver 的日志给本地 Flume Agent,然后再由它转发给下一个能够存储的 Agent。
在这里插入图片描述
为什么要多一层转发,而不是直接配置 sink 输出为下一跳的 HDFS 的输出呢?

我想到一种可能是网络不通时,可以通过这个配置,当做转发跳板,完成不连通网段的日志转发。

selector 的 optional 配置生效步骤

一个 source 可以转发 Event 到多个 Channel 中,Flume 提供了 selector 配置转发路由,根据官方文档,总结必须转发的 Channel 和可选转发的 Channel 以及默认转发的 Channel 生效的顺序。

第一个知识点, selector.type 有两个选项,replicatingmultiplexing ,默认是 replicating

第二个知识点,按官方示例对某个 source 的 selector 配置了必须、可选、默认的 Channel :

# 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.optional.CA = mem-channel-1 file-channel-2
agent_foo.sources.avro-AppSrv-source1.selector.mapping.AZ = file-channel-2
agent_foo.sources.avro-AppSrv-source1.selector.default = mem-channel-1

转发 Event 的流程中,匹配 CA 的事件:

  1. 先尝试转发必须映射Channel mem-channel-1 中。
  2. 如果第一步转发失败,则重试继续写入 mem-channel-1
  3. mem-channel-1 写入成功后,再尝试写入可选的 Channel file-channel-2,如果写入失败,则不会重试。
  4. optional 如果直接配置在全局事件上,此时没有匹配的 Event 会进入 default ,同时也会进入 optional 的 Channel 。

SSL 参数配置


The SSL system properties can either be passed on the command line or by setting the JAVA_OPTS environment variable in conf/flume-env.sh. (Although, using the command line is inadvisable because the commands including the passwords will be saved to the command history.)

参数设置的方式有两种,一种是 Java 的环境变量,另一种是 Flume 的环境参数,官方不建议通过命令行的方式设置 Java 环境变量,因为命令会记入操作系统的 history 文件中,包含的 SSL 的敏感信息会暴露。

但问题时,SSL 参数配置中有明文,通过配置文件也还是有暴露的风险啊。

知识点 ,SSL 配置生效的优先级,从高到低:

  1. 组件级别的参数配置。
  2. Java 系统环境变量。
  3. Flume 的环境变量。

推荐阅读
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
author-avatar
右心1477
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有