flume拦截器

Flume拦截器-应用与配置 Flume最重要的组件是Source、Channel和Sink,另外,Flume Agent还有一些使Flume更加灵活的组件,如拦截器,Channel选择器,Sink组和Sink选择器。本文将讨论一下拦截器的应用。 拦截器 拦截器(Interceptor)是简单的插入式组件,设置在Source和Source写入数据的Channel之间,Source接收到... 阅读详情

Flume最重要的组件是Source、Channel和Sink,另外,Flume Agent还有一些使Flume更加灵活的组件,如拦截器,Channel选择器,Sink组和Sink选择器。本文将讨论一下拦截器的应用。

拦截器

拦截器(Interceptor)是简单的插入式组件,设置在Source和Source写入数据的Channel之间,Source接收到的事件在写入到Channel之前,拦截器都可以对时间进行拦截,转换或删除这些时间。每个拦截器实例只处理同一个Source接受到的事件。

可以添加任意数量的拦截器去处理从单个Source传来的事件,Source将同一个事务中的所有事件传递给Channel处理器,进而传递给拦截器链,然后事件被传递给拦截器链的第一个拦截器,之后对事件进行转换处理,往下一个拦截器传递,依次直到最后一个拦截器返回的事件写入到Channel中。

拦截器必须在事件写入到Channel之前完成处理,因此在拦截器中进行大量的耗时处理不太合适,如果拦截器的处理非常耗时,需要相应调整响应超时时间。防止由于长时间没有响应发送事件的客户端或者Sink,而导致超时。

拦截器是需要命名的组件,每个拦截器都需要限定一个名字。拦截器的配置需要以interceptor开头、后面跟着拦截器的名称,以及配置项名称。

下面是拦截器配置示例

a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.interceptors = i1 i2
a1.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.HostInterceptor$Builder
a1.sources.r1.interceptors.i1.preserveExisting = false
a1.sources.r1.interceptors.i1.hostHeader = hostname
a1.sources.r1.interceptors.i2.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
a1.sinks.k1.filePrefix = FlumeData.%{CollectorHost}.%Y-%m-%d
a1.sinks.k1.channel = c1

时间戳拦截器

Flume中最常用的拦截器是时间戳拦截器,该拦截器将时间戳插入到Flume事件的报头,附带的timeStamp是HDFS Sink用来分桶的报头。如果时间戳报头已经存在,则会替换该时间戳报头,除非preserveExisting参数设置为true。该拦截器经常用在第一层agent,用于从客户端接受数据。

参数描述
typetimestamp
preserveExisting默认值false。如果设置为true,若时间戳报头以及存在,则不会替换该时间戳报头

配置示例

a1.sources = r1
a1.channels = c1
a1.sources.r1.channels =  c1
a1.sources.r1.type = seq
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = timestamp

主机拦截器

主机拦截器插入服务器的IP地址或者主机名,Agent将这些内容注入到Flume的事件报头中,事件报头中的键使用hostHeader配置,默认值为host。如果事件报头在事件中已经存在,则会替换该事件报头,除非preserveExisting参数设置为true。将useIP参数设置为false,插入的主机名会替换ip地址。

参数描述
typehost
hostHeader默认host,事件的头,用于插入ip地址或者主机名
useIP如果设置为true,host键插入的是IP地址
preserveExisting默认值false。如果设置为true,若报头存在,则不会替换该报头
a1.sources = r1
a1.channels = c1
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = host
a1.sources.r1.interceptors.i1.hostHeader = hostname

静态拦截器

静态拦截器可以简单的将固定报头的键和值插入拦截的每个事件中。

参数描述
typestatic
key默认key,报头的键
value默认value,报头键对应的值
preserveExisting默认值false。如果设置为true,若该报头已经存在,则不会替换该报头
a1.sources = r1
a1.channels = c1
a1.sources.r1.channels =  c1
a1.sources.r1.type = seq
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = static
a1.sources.r1.interceptors.i1.key = datacenter
a1.sources.r1.interceptors.i1.value = NEW_YORK

正则过滤拦截器

该拦截器可以用于过滤事件,每个正则过滤器拦截将事件体转换为UTF-8的字符串,使用该字符串基于配置的正则表达式去匹配,如果匹配成功,则通过该事件或者抛弃该事件。

参数描述
typeregex_filter
regex默认.* 正则表达式
excludeEvents默认false,如果为true,匹配上的事件会丢弃。

示例

a1.sources.r1.interceptors.i1.regex = (\\d):(\\d):(\\d)
a1.sources.r1.interceptors.i1.excludeEvents= true

Regex Extractor Interceptor

此拦截器使用指定的正则表达式提取regex捕获组,并将匹配组追加到事件的报头。它还支持在将匹配组添加为事件报头之前对其进行格式化。

参数描述
typeregex_extractor
regex默认.* 正则表达式
serializers空格分割的名称,对应正则匹配的捕获组
serializers.<s1>.name报头的键名
serializers.<s1>.type默认default (org.apache.flume.interceptor.RegexExtractorInterceptorPassThroughSerializer),还有org.apache.flume.interceptor.RegexExtractorInterceptorMillisSerializer,或者自定义实现org.apache.flume.interceptor.RegexExtractorInterceptorSerializer
 

默认的序列化器,org.apache.flume.interceptor.RegexExtractorInterceptorPassThroughSerializer,只将匹配项映射到指定的头名称,并在regex提取值时传递该值。可以自定义序列化器实现更多功能,以任意方式格式化匹配项。自定义的类需要实现org.apache.flume.interceptor.RegexExtractorInterceptorSerializer 接口。

示例一

a1.sources.r1.interceptors.i1.regex = (\\d):(\\d):(\\d)
a1.sources.r1.interceptors.i1.serializers = s1 s2 s3
a1.sources.r1.interceptors.i1.serializers.s1.name = one
a1.sources.r1.interceptors.i1.serializers.s2.name = two
a1.sources.r1.interceptors.i1.serializers.s3.name = three

示例二

a1.sources.r1.interceptors.i1.regex = ^(?:\\n)?(\\d\\d\\d\\d-\\d\\d-\\d\\d\\s\\d\\d:\\d\\d)
a1.sources.r1.interceptors.i1.serializers = s1
a1.sources.r1.interceptors.i1.serializers.s1.type = org.apache.flume.interceptor.RegexExtractorInterceptorMillisSerializer
a1.sources.r1.interceptors.i1.serializers.s1.name = timestamp
a1.sources.r1.interceptors.i1.serializers.s1.pattern = yyyy-MM-dd HH:mm

UUID拦截器

拦截器可以为每个事件生成唯一的标识符,生成的UUID可以设置为可配置的参数,还可以为UUID生成相应的前缀。

参数描述
typeorg.apache.flume.sink.solr.morphline.UUIDInterceptor$Builder
headerName报头名称
preserveExisting默认true,如果UUID已存在,保留不覆盖。
prefix生成UUID的前缀
a1.sources.r1.interceptors.i1.type = org.apache.flume.sink.solr.morphline.UUIDInterceptor$Builder
a1.sources.r1.interceptors.i1.headerName = prefix-
a1.sources.r1.interceptors.i1.preserveExisting = false

自定义拦截器

拦截器是Flume中最容易编写的组件,只需要实现Interceptor接口。该接口本身非常简单,Flume本身要求所有的拦截器必须有一个实现Interceptor$Builder接口的Builder类。所有的Builde类必须有一个公共的无参构造方法。Flume使用该方法完成实例化,可以使用传递到Builder类的Context实例配置拦截器,所有需要的参数都传递到Context实例。

拦截器一般用于拦截,转换事件,通常给拦截的事件插入事件报头,这些事件用于后续的HDFS Sink(用于时间戳或者基于报头的分桶),Hbase Sink(用于行键)等。这些事件报头也经常在复杂的Channel处理器中用于将流分为多个流的分支,或者基于优先级将事件发送到不同的Sink中。
Interceptor接口

public interface Interceptor {
    void initialize();
 
    Event intercept(Event var1);
 
    List<Event> intercept(List<Event> var1);
 
    void close();
 
    public interface Builder extends Configurable {
        Interceptor build();
    }
}
 

可以看到有两种处理事件的方法,第一种方法接受一个事件返回一个事件列表,第二种方法 可以接受一个事件列表并返回一个事件列表。这两个方法必须都是线程安全的,因为如果Source运行在多线程环境下,这些方法可能被多个线程调用。

 

整体流程:

 

 

  • 编写java代码
  • 打包上传到flume的lib目录下
  • 编写flume配置文件

flume Interceptor源码

在这里插入图片描述

  • public void initialize()运行前的初始化,一般不需要实现

  • public Event intercept(Event event)处理单个event;
  • public List intercept(List events)批量处理event,内部调用单个的event逻辑即可;
  • public void close()可以做一些清理工作,可以不实现
  • public interface Builder extends Configurable 构建Interceptor对象,外部使用这个Builder来获取Interceptor对象。

综上所述,实现Interceptor,自定义flume拦截器主要实现以下3个方法、接口

 

示例

需求:实现过滤某个不需要的字段,并加密另外一个字段

原始数据格式

# 加密 |不处理|不处理|过滤|不处理
13504245101,male,11,chifan,bei
13717457125,female,22,shuijue,shang
18451762413,male,33,dadoudou,guang

处理后的数据

xxxxxxxxxxx,male,11,bei
xxxxxxxxxxx,female,22,shang
xxxxxxxxxxx,male,33,guang

第一个flume代码(自定义flume拦截器)

pom文件

 <dependencies>
        <dependency>
            <groupId>org.apache.flume</groupId>
            <artifactId>flume-ng-core</artifactId>
            <version>1.6.0-cdh5.14.2</version>
        </dependency>
</dependencies>

java代码


public class MyInterceptor implements Interceptor{
    //需要加密字段的坐标
    private final String encrypted_field_index;
    //需要过滤字段的坐标
    private final String filter_field_inedex;

    public MyInterceptor(String encrypted_field_index,String filter_field_inedex){
        this.encrypted_field_index = encrypted_field_index;
        this.filter_field_inedex = encrypted_field_index;
    }
    @Override
    public void initialize() {
        //do nothing

    }

    @Override
    public Event intercept(Event event) {
        if (event == null){
            return null;
        }
        try {
            {
                //每个event由header和body组成,body是数据的载体
                String line = new String(event.getBody(), Charsets.UTF_8);
                String[] fields = line.split(" ");
                String newLine = "";
                for (int i = 0; i < fields.length; i++) {
                    int encryptedIndex = Integer.parseInt(encrypted_field_index);
                    int filterIndex = Integer.parseInt(filter_field_inedex);
                    if (i == encryptedIndex){
                        newLine+=md5(fields[i] + ",");
                    }else if (i !=filterIndex){
                        newLine += fields[i] + ",";
                    }
                }
                newLine = newLine.substring(0,newLine.length() - 1);
                event.setBody(newLine.getBytes(Charsets.UTF_8));
                return event;
                }
            }catch (Exception e){
            return event;
        }
    }

    @Override
    public List<Event> intercept(List<Event> events) {
        return null;
    }

    @Override
    public void close() {
        //do nothing
    }
    /**
     * 相当于自定义Interceptor的工厂类
     * 在flume采集配置文件中通过制定该Builder来创建Interceptor对象
     * 可以在Builder中获取、解析flume采集配置文件中的拦截器Interceptor的自定义参数:
     * 指定需要加密的字段下标 指定不需要对应列的下标等
     * @author
     *
     */

    public static class MyBuilder implements Interceptor.Builder{
        //需要加密的字段下标
        private String encrypt_field_index;
        //需要过滤的字段下标
        private String filter_field_index;

        @Override
        public Interceptor build() {
            return new MyInterceptor(encrypt_field_index,filter_field_index);
        }

        @Override
        public void configure(Context context) {
            this.encrypt_field_index = context.getString("encrypt_field_index","");
            this.filter_field_index = context.getString("filter_field_index","");
        }
    }

    //md5加密的方法
    public static String md5(String plainText) {
        //定义一个字节数组
        byte[] secretBytes = null;
        try {
            // 生成一个MD5加密计算摘要
            MessageDigest md = MessageDigest.getInstance("MD5");
            //对字符串进行加密
            md.update(plainText.getBytes());
            //获得加密后的数据
            secretBytes = md.digest();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("md5 error");
        }
        //将加密后的数据转换为16进制数字
        String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字
        // 如果生成数字未满32位,需要前面补0
        for (int i = 0; i < 32 - md5code.length(); i++) {
            md5code = "0" + md5code;
        }
        return md5code;
    }

}

flume配置文件

# name the agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# config the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -f /flume/testData.txt
a1.sources.r1.channels = c1
a1.sources.r1.intercepotrs = i1
#MyBuilder为MyInterceptor的内部类
a1.sources.r1.interceptors.i1=type = com.interceptor.MyInterceptor$MyBuilder
# 这的字段一定要和代码中的config中的字段相等
a1.sources.r1.interceptors.i1.encrypt_field_index = 0
a1.sources.r1.interceptors.i1.filter_field_index = 3
# channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.channels = c1
a1.sinks.k1.hdfs.path = hdfs://node01:8020/Myinterceptor/%Y-%m-%d/%H%M
a1.sinks.k1.hdfs.filePrefix =events-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
a1.sinks.k1.hdfs.rollInterval = 5
a1.sinks.k1.hdfs.rollSize = 50
a1.sinks.k1.hdfs.rollCount = 10
a1.sinks.k1.hdfs.batchSize = 100
a1.sinks.k1.hdfs.useLocalTimeStamp = true
a1.sinks.k1.hdfs.fileType = DataStream

运行结果
在这里插入图片描述

CounterInterceptor 类的拦截方法是线程安全的,因为变量是由final修饰的,或者是Atomic原子操作。如果需要拦截该事件,则返回null即可,如果是事件列表,则必须返回一个事件列表,即使为空,也必须返回列表。

拦截器的调用是由Channel处理器来完成的,Channel处理器会首先实例化Builder类,然后调用Builder类的configure方法,该方法用于传递包含配置拦截器的Context实例。然后Channel处理器调用build方法,该方法返回拦截器。Channel处理器通过调用拦截器实例的Initialize方法初始化拦截器。

    • 实现Interceptor接口中intercept(Event event)方法
    • intercept(List<Event> events)方法。
    • 创建内部类Builder实现Interceptor.Builder接口
Flume之常用拦截器 在Flume中会使用一些拦截器对source中的数据在进入channel之前进行拦截做一些处理,比如过滤掉一些数据,或者加上一些key/value等。可以同时使用多个拦截器,实现不同的功能。 常用的拦截器有时间戳拦截器、主机名拦截器、静态拦截器等。 时间戳拦截器:会在event的Header中添加一个key为timestamp,value为当前时间戳的值。 主机名拦截器:会在event的Header中添加一个key(默认是host,也可通过hostHeader这个属性来自定义key),value是fl 阅读详情

相关推荐

Flume系列:拦截器和自定义Flume拦截器

本文介绍了 Flume 中的内置拦截器,如时间戳拦截器和 Host 拦截器,并提供了相应的配置示例。此外,还展示了如何自定义 Flume 拦截器,包括实现自定义拦截器的代码示例和配置示例。Flume 提供了一些内置的拦截器,例如时间戳拦截器、Host 拦截器等,同时也支持自定义拦截器。本文将深入探讨拦截器的概念以及如何自定义 Flume 拦截器,同时提供相应的源代码示例。请注意,Flume 的配置文件中还可以配置多个拦截器,它们会按照在配置文件中定义的顺序依次应用于事件。这样可以实现更复杂的事件处理逻辑。

2301_79367634的博客 314

【Flume-03】中的拦截器

拦截器为正则表达式拦截器, 数据源为Syslogtcp格式,传送通道为MemChannel,最后传送的目的地是HDFS。通过时间拦截器,数据源为SyslogTcp,传送的通道模式是FileChannel,最后输出的目的地为HDFS。回到第一个窗口发现,并没有采集到,那是因为我流入的数据并不符合我配置方案中的正则表达式。如果一个拦截器需要删除事件,它只需要在返回的事件集中不包含要删除的事件即可。拦截器采用了责任链模式,多个拦截器可以按指定顺序拦截。一个拦截器返回的事件列表被传递给链中的下一个拦截器。

关注我!菜鸟进阶站 1644

flume系列之:拦截器和自定义flume拦截器

Flume中的拦截器(interceptor),用户Source读取events发送到Sink的时候,在Event header中加入一些有用的信息,或者对Event的内容进行过滤,完成初步的数据清洗。这在实际业务场景中非常有用,例如通过拦截器可以把数据库名称、表名、Event生成的时间放入Event的header中,用于生成hdfs的文件存放目录。 如下所示是文件sink到hdfs的目录:其中optics_prod是数据库名称,sale_order是表名,这些都是通过flume拦截器获取到的。 /raw/

zhengzaifeidelushang的博客 839

Flume自定义拦截器 - ETL拦截器和分类拦截器

深刻的理解了Flume中的拦截器和选择器,以及Source Selector、Channel Selector。自定义拦截器的步骤,并编程实现了一个自定义的拦截器,来进行日志过滤,选择,以及发送到不同的Kafka topic中

阿年的博客 1546

C# chart以鼠标所在位置为中心进行缩放

以前都用labview做一些软件,但给出去总是会遇到版本,安装包过大等一些问题,于是想自学C#,记录一下使用过程中遇到的一些问题和解决措施,便于日后回顾。 在这个项目中需要绘制折线图,由于数据比较大,需要对图表进行缩放操作,以鼠标为中心对图表进行缩放,在网上查找了一些资料没找到我想要的,于是自己想了一个解决方案,可以基本实现,但略显繁琐,由于刚开始学习C#,对一些操作不太了解,若以后遇...

fei的博客 6363

fastjson1.2.83反序列化漏洞

【代码】fastjson1.2.83反序列化漏洞。

Coder的博客 1万+

Flume实战--Flume中的拦截器详解与操作

在处理大规模数据流时,Apache Flume 是一款功能强大的数据聚合工具,它可以通过拦截器在运行时对Event进行修改或丢弃。本文将详细讲解Flume中的拦截器,包括时间戳拦截器、Host添加拦截器、静态拦截器以及如何自定义拦截器。

天冬忘忧的博客 2666

OpenClaw记忆插件升级实战:从memory-lancedb-pro安装到AgentSkill封装

向量数据库作为现代AI应用的核心基础设施,通过将非结构化数据转换为高维向量并利用相似度检索实现语义理解。其原理基于嵌入模型生成向量表示,结合近似最近邻搜索算法实现高效查询。这项技术为智能体系统提供了长期记忆和上下文感知能力,显著提升了对话连贯性与任务执行效率。在AI智能体开发领域,向量数据库常用于知识库构建、对话历史管理和个性化推荐等场景。本文聚焦OpenClaw框架中memory-lancedb-pro插件的部署实践,针对**插件加载顺序**和**Apache Arrow依赖**两大常见痛点,通过封装成可

weixin_42525482的博客 638

flume拦截器及问题解决

概述 Flume 除了主要的三大组件 Source、Channel和 Sink,还有一些其他灵活的组件,如拦截器、SourceRunner运行器、Channel选择器和Sink处理器等。 组件框架图 今天主要来看看拦截器,先看下组件框架流程图,熟悉了大致框架流程学习起来必然会更加轻松:  接收事件根据配置选择对应的Source运行器(EventDrivenSou

ty_laurel的博客 8423

ESD镜像解密与转换全攻略:从esd-decrypter到WinNTSetup的完整流程

本文详细解析了ESD镜像的加密特性与压缩优势,并提供了从解密到转换的完整实战指南。核心步骤包括使用esd-decrypter工具解密ESD文件为WIM格式,以及如何结合WinNTSetup进行灵活的系统安装或进一步封装为可引导的ISO镜像,帮助用户高效处理官方Windows安装镜像。

weixin_29207439的博客 451

abb机器人指令手册_ABB机器人配置圆形输送链跟踪

更多内容请点击上方ABB机器人实战技巧关注也可点击公众号下方往期经典浏览更多内容转载请先后台留言,大家一起支持原创,推动机器人使用和发展本公众号对各类ABB机器人应用,仿真,毕业设计提供技术支持,详细后台留言本公众号诚挚希望与各机器人培训机构,机器人使用单元合作,提供技术支持,详细后台留言1. 通常的机器人输送链跟踪,均为直线输送链跟踪,例如下图2. 有些情况,输送链为圆形,例如...

weixin_39849894的博客 2044

Flume拦截器

相信大家对Flume都已经很了解,Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。其架构多为Source、Channel...

ItStar 481

Supermind量化实战:我如何给双均线策略加上“止损”和“仓位管理”,让回测收益更稳健

本文详细介绍了如何在Supermind平台上为双均线策略添加止损和仓位管理模块,以提升量化交易的稳健性。通过Python实现动态止损和智能仓位管理,策略的年化收益率从12.3%提升至15.8%,最大回撤从58.7%降至22.4%,Sharpe比率显著提高。这些实战技巧适用于量化交易爱好者,帮助他们在黑天鹅行情中保持收益稳定。

weixin_42567752的博客 362

flume flume自定义拦截器

flume自定义拦截器flume自带拦截器flume自定义拦截器flume Interceptor源码示例原始数据格式处理后的数据第一个flume代码(自定义flume拦截器)pom文件java代码flume配置文件 flume自带拦截器 timestamp 拦截器:在Event Header中添加时间戳。 Host 拦截器:在Event Header中添加agent运行机器的Host或IP。 Static 拦截器:在Event Header中添加自定义静态属性。 Remove Header拦截器:可移除

a3125504x的博客 1359

STC32-USB-CAN:基于STC32G的国产双通道隔离CAN分析调试设备设计与实战

本文详细介绍了基于国产STC32G单片机设计双通道隔离CAN分析调试设备的全过程。该设备实现了双通道隔离CAN数据监控、中继转发及USB高速通信,并支持故障注入测试。核心采用全国产器件,通过实战测试验证了其在1Mbps波特率下长时间稳定工作的可靠性,为工程师提供了高性价比的CAN总线调试解决方案。

weixin_42465140的博客 97

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

jacke121的专栏 2759

Flume timestamp拦截器

Flume拦截器简介 Flume拦截器就是一个插件,可以在从信源到信宿传输事件的过程中操作和修改事件。大多数拦截器要么在事件的基础上加上一些元数据要么基于某些规则删除一些事件。 Flume拦截器例子 1.创建agent配置文件 把下列内容存入agent5.conf,并保存到Flume的工作目录/opt/flume/bin下面 agent5.sources = netsource

蔡先生的专栏 1761

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Flume内置拦截器与自定义拦截器(代码实战)

官网上内置拦截器的表 由于拦截器一般针对Event的Header进行处理,这里先介绍一下Event event是flume中处理消息的基本单元,由零个或者多个header和body组成。 Header 是 key/value 形式的,可以用来制造路由决策或携带其他结构化信息(如事件的时间戳或事件来源的服务器主机名)。你可以把它想象成和 HTTP 头一样提供相同的功能——通过该方法来传输正文之外的额外信息。 Body是一个字节数组,包含了实际的内容。 flume提供的不同source会给其生成的event

gym02的博客 2996

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

flume拦截器及自定义拦截器

拦截器做什么呢? 时间拦截器 以时间拦截器为例.会在Event的header中添加一个属性进去,属性的key叫做timestamp, value是当前的毫秒值. 问题是写到header然后呢?有啥用呢? 就是在比如说保存到hdfs上时,这个header中的时间戳的value可以作为文件夹的目录,这样就比较方便. 也可以比如说加到文件名上面. a1.sources.r1.interceptors = i1 i2 i3 a1.sources.r1.interceptors.i1.type = timestam

鸭梨的博客 979

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Flume 拦截器概念及自定义拦截器的运用

位于 Source 与 Channel 之间,在写入Channel 之前,拦截器可以对数据进行转换、提取或删除,以满足特定的需求。拦截器可以用于监控数据流的运行情况,记录日志信息或统计数据流中的事件数量、处理速率等指标,帮助用户进行性能分析和故障排查。在 Flume 中,拦截器(Interceptors)是一种可以在事件传输过程中拦截、处理和修改事件的组件。例如,可以添加时间戳、主机信息、标签等,以丰富事件数据的内容。Flume 拦截器就是起到这样的效果,对数据进行处理、转换、删除等操作,是不是很简单呀。

JIE的博客 --- moon_coder 2146

Flume拦截器(含自定义拦截器)

Flume拦截器(含自定义拦截器)一、Flume拦截器1.1 时间戳拦截器1.2 主机名拦截器1.3 UUID拦截器1.4 查询替换拦截器1.5 正则过滤拦截器1.6 正则抽取拦截器二、Flume自定义拦截器2.1 添加Pom.xml依赖2.2 自定义实现拦截器2.3 Flume配置文件三、其它案例 ——————— —————————— —————————— —————————— ...

weixin_43520450的博客 1729

头歌flume拦截器答案

Flume1/flume.conf配置文件#agent名为a1;#采集 /opt/flume/data目录下所有文件#channel选择memery#落地到hdfs的hdfs://localhost:9000/flume/文件名的前缀/文件名上的日期#文件格式设为DataStream#根据时间回滚,3s配置文件/***/

maxiangdongkk的博客 3738

Flume配置及拦截器

flume从kafka采集数据到hdfs,flume拦截器解析数据时间到指定的分区

weixin_43994052的博客 614

flume常用的拦截器和自定义拦截器

在我们公司的一个项目中,在手机日志信息的时候需要设计一个拦截器方便后面数据的清洗和分类,减轻集群的压力。因此深入的研究了一下flume的拦截器 Flume中的拦截器(interceptor),用户Source读取events发送到Sink的时候,在events header中加入一些有用的信息,或者对events的内容进行过滤,完成初步的数据清洗。这在实际业务场景中非常有用,Flume-ng 1....

xuxu96 2498
上一篇: kafka全部数据清空与某一topic数据清空一过期数据清理
下一篇: 直观讲解一下RPC调用和HTTP调用的区别
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值