flume多路选择器,拦截器,sink-kafka,sinke-hdfs

Flume选择器 前言 Channel选择器是决定Source接受的特定事件写入到哪个Channel的组件,他们告诉Channel处理器,然后由其将事件写入到Channel。 Agent中各个组件的交互 由于Flume不是两阶段提交,事件被写入到一个Channel,然后事件在写入下一个Channel之前提交,如果写入一个Channel出现异常,那么之前已经写入到... 阅读详情

模拟数据 

u14519,e1,mall,1614674623000
u11822,e1,waimai,1614674624000
u14539,e1,mall,1614674623000
u11842,e1,waimai,1614674624000
u14559,e1,mall,1614674623000
u11862,e1,mall,1614674624000
u14579,e1,waimai,1614674623000
u11882,e1,mall,1614674624000
u14599,e1,waimai,1614674623000
u11812,e1,waimai,1614674624000
u14529,e1,mall,1614674623000
u11832,e1,waimai,1614674624000

需求 :a.log里有两类log ,waimai的和mall的,我现在需要用flume采集log数据,waimai的采集到hdfs,mall的采集到kafka。

需要定义两个channel,两个sink 一个channel接hdfs,一个接kafka,我们需要配置一个多路选择器,flume采集到一条数据要放到哪个channel 需要根据这个数据的header中的标记信息判断,如果是waimai放到hdfs channel,否则kafka channel

但是数据header中肯定是没有这个flag信息的,所以需要我们写一个拦截器,每条数据采集到之后先进行处理--  打标记 。

 

taildir-multiplexing-hdfs-kafka.properties

a1.sources = r1
a1.channels = c1 c2
a1.sinks = k1 k2

#两个channel
a1.sources.r1.channels = c1 c2
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = g1
a1.sources.r1.filegroups.g1 = /logdata/a.*

#一个拦截器
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = cn.ws.yiee.flume.MultiplexingInterceptor$MultiplexingInterceptorBuilder
#指定要拦截的字段在一行中的位置,flag和时间戳,为了以后可以复用,拦截别的字段
a1.sources.r1.interceptors.i1.flagfield = 2
a1.sources.r1.interceptors.i1.timestampfield = 3

#一个多路选择器
a1.sources.r1.selector.type = multiplexing
#header的要判断标识的key
a1.sources.r1.selector.header = flag
#如果flag == mall 去channle c1 或者 flag == waimai 去channle c2 
a1.sources.r1.selector.mapping.mall = c1
a1.sources.r1.selector.mapping.waimai = c2
#以上两种都不是 去c2
a1.sources.r1.selector.default = c2

#两个channel类型 memory类型
a1.channels.c1.type = memory
a1.channels.c2.type = memory

#配置sink
a1.sinks.k1.channel = c1
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.bootstrap.servers = dream1:9092,dream2:9092,dream3:9092
a1.sinks.k1.kafka.topic = mall
a1.sinks.k1.kafka.producer.acks = 1

a1.sinks.k2.channel = c2
a1.sinks.k2.type = hdfs
a1.sinks.k2.hdfs.path = hdfs://dream1:9000/waimai/%Y-%m-%d/%H
a1.sinks.k2.hdfs.filePrefix = doitedu-log-
a1.sinks.k2.hdfs.fileSuffix = .log
a1.sinks.k2.hdfs.rollSize = 268435456
a1.sinks.k2.hdfs.rollInterval = 120
a1.sinks.k2.hdfs.rollCount = 0
#默认是SequenceFile,我们为了直观看数据,改成DataStream
a1.sinks.k2.hdfs.fileType = DataStream




自定义拦截器

 

<dependency>
    <groupId>org.apache.flume</groupId>
    <artifactId>flume-ng-core</artifactId>
    <version>1.9.0</version>
    <scope>provided</scope>
</dependency>

 

package com.ws;

import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;

import java.util.List;
import java.util.Map;

public class MultiplexingInterceptor implements Interceptor {
    private Integer flagIndex;
    private Integer timeStampIndex;
    public MultiplexingInterceptor(Integer flagIndex, Integer timeStampIndex) {
        this.flagIndex = flagIndex;
        this.timeStampIndex = timeStampIndex;
    }

    @Override
    public void initialize() {

    }

    @Override
    public Event intercept(Event event) {
        byte[] body = event.getBody();
        String line = new String(body);
        String[] split = line.split(",");

        Map<String, String> headers = event.getHeaders();
        // 根据传入的index获取指定的值 mall/waimai
        headers.put("flag",split[flagIndex]);
        // 时间戳,这个是hdfs生成目录用的
        headers.put("timestamp",split[timeStampIndex]);

        return event;
    }

    @Override
    public List<Event> intercept(List<Event> list) {
        for (Event event : list) {
            intercept(event);
        }
        return list;
    }

    @Override
    public void close() {

    }
    public static class MultiplexingInterceptorBuilder implements Interceptor.Builder{
        Integer flagIndex;
        Integer timeStampIndex;
        @Override
        public Interceptor build() {
            MultiplexingInterceptor interceptor = new MultiplexingInterceptor(flagIndex, timeStampIndex);
            return interceptor;
        }

        @Override
        public void configure(Context context) {
            flagIndex = context.getInteger(Constants.FLAG);
            timeStampIndex = context.getInteger(Constants.TIMESTAMP);
        }
    }
}
package com.ws;

public class Constants {
    public static final String FLAG = "flagfield";
    public static final String TIMESTAMP = "timestampfield";
}

 

创建模拟数据

-- 模拟日志生成的脚本:
while true
do
if [ $(($RANDOM % 2)) -eq 0 ]
then
echo "u$RANDOM,e1,waimai,`date +%s`000" >> a.log
else
echo "u$RANDOM,e1,mall,`date +%s`000" >> a.log
fi
sleep 0.2
done


启动flume agent

[root@dream1 flume-1.9.0]# bin/flume-ng agent -c conf/ -f agentconf/taildir-multiplexing-hdfs-kafka.properties -n a1 -Dflume.root.logger=DEBUG,console

查看kakfa

[root@dream2 ~]# /opt/apps/kafka_2.11-2.1.1/bin/kafka-console-consumer.sh --bootstrap-server dream1:9092,dream2:9092,dream3:9092 --topic mall
u12865,e1,mall,1614674621000
u12532,e1,mall,1614674621000
u28327,e1,mall,1614674622000
u11954,e1,mall,1614674622000
u14599,e1,mall,1614674623000
u11842,e1,mall,1614674624000

查看hdfs

[root@dream2 ~]# hadoop fs -tail /waimai/2021-03-02/16/doitedu-log-.1614674535986.log
21/03/02 16:44:55 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
614674645000
u29646,e1,waimai,1614674645000
u2987,e1,waimai,1614674645000
u19265,e1,waimai,1614674645000
u7311,e1,waimai,1614674646000
u611,e1,waimai,1614674646000
u23499,e1,waimai,1614674647000
u32585,e1,waimai,1614674647000
u8615,e1,waimai,1614674647000
u1546,e1,waimai,1614674647000
u32598,e1,waimai,1614674648000

完美结束

《数据同步-Flume》Flume数据采集、Flume拦截器快速入门 frp穿透获取数据,通过分割脚本,将采集到的数据分割到指定的文件夹,然后由flume采集到hdfs,本次介绍的拦截器是设置flume中。主要实现功能是对flume接收到的json数据进行base解码,并传回给flume,由flume再次上传到hdfs。 阅读详情

相关推荐

Flume之常用选择器

Flume中的选择器主要是用于决定source进入哪个channel中,主要有两种选择器: replicating selector:将event复制到该source对应的所有channel中。 multiplexing selector:指定特定header的值进入某个channel。 如果没有指定选择器,默认使用replcating selector。 案例-replicating selector: 这里配置一个source,两个channel,两个sink。 创建自定义conf文件

QYHuiiQ 1574

Flume:自定义拦截器-选择器-kafka

kafka基本操作与flume级联案例操作手册(不使用选择器、拦截器): 1、启动hdfs、kafka (1)如果是第一次启动kafka,启动前需要设置一下broker.id=0或1: vi /opt/apps/kafka_2.11-2.0.0/config/server.properties ①broker.id=0或broker.id=1 ②zookeeper地址: zookeeper.connect=doitedu01:2181,doitedu02:2181,doitedu03:2181 (2)

weixin_45484707的博客 1257

JSAPI微信支付(小程序)V3版本JAVA代码实战源码

1.1、商户通过JSAPI/小程序下单接口获取到发起支付的必要参数prepay_id后,再通过微信小程序调起微信支付收银台JSAPI/小程序下单_JSAPI支付|微信支付商户文档中心1.3、微信H5发起类似,结合文档,细微调整,前端返回类似,参考文档修改为微信内置浏览器调起支付即可。

java web 708

Flume配置案例——多sink

系统环境 Linux Ubuntu 14.04 jdk-7u75-linux-x64 hadoop-2.6.0-cdh5.4.5 flume-ng-1.5.0-cdh5.4.5 任务内容 说明: 1、创建两个Agent,分别为agent1和agent2, agent1(即Agent foo)具体如下: (1)采用avro类型的source,使用nc命令产生Syslog日志,发送到6868端口。 ...

极地星辰 3006

华为2288H-V5服务器做raid的详细步骤

华为2288H-V5服务器做RAID

qq_50263172的博客 6万+

uniapp串口通信实战:从零搭建物联网设备控制App(附完整代码)

本文详细介绍了如何使用Uniapp实现串口通信,从零搭建物联网设备控制App。内容涵盖环境配置、串口初始化、数据收发、错误处理等核心功能,并提供了完整的代码示例,帮助开发者快速掌握跨平台串口通信技术,适用于智能农业、工业自动化等物联网场景。

weixin_30369041的博客 597

Flume-自定义拦截器,自定义Source从MySQL读取数据,自定义Sink

Flume-自定义拦截器,自定义Source从MySQL读取数据,自定义Sink

H_X_P_的博客 671

vivado生成及调用自定义IP的方法

开发环境:vivado 2018.2 1.将整个工程封装为自定义IP 将整个工程封装为自定义IP主要有以下步骤: 步骤1.选中工程中的top模块。点击Tools ------> Create and Package New IP,如图1所示 图1 步骤2.弹出界面后,点击next至图2界面,选择Package your current project,然后继续点击next 图2 步骤3.选择生成的IP路径,如图3所示。这个路径就是后续添加该IP的路径 图3 步骤4.继续点击next,然后选择fi

进击的阿日比 4733

Flume02--1.avro source和kafka source 2. 拦截器 3. channel详解 4 sink 5 slector(选择器)6 sink processor

Flume source channel sink avro

u012550977的博客 1282

学好超几何分布的核心公式,破解双色球!

彩票本质是概率游戏,不存在"必中公式"科学投注的核心是风险收益比管理长期投注的期望值始终为负(理论回报率约47%-63%)数学维度:运用概率工具优化策略经济维度:控制投注成本在可承受范围人文维度:将彩票视为社会公益的参与方式通过本文构建的数学模型,彩民可以在概率框架内实现更理性的投注决策。但最终能否收获幸运,仍取决于那个永恒的未知数——概率女神的眷顾。一、超几何分布的核心公式。

weixin_44904675的博客 1万+

逆变器专题(9)-基于dq坐标系的逆变器解耦控制建模与实时仿真分析

本文深入探讨了基于dq坐标系的逆变器解耦控制建模与实时仿真分析。通过生动的比喻和详细的数学推导,阐述了如何通过坐标变换和前馈补偿实现d轴与q轴的独立控制,从而提升系统动态性能与稳定性。文章还介绍了在MATLAB/Simulink中搭建仿真模型、分析动态响应与稳定性的方法,并展望了硬件在环(HIL)实时仿真的高级验证手段,为新能源并网与电机驱动领域的工程师提供了宝贵的实践指南。

gold的博客 547

Kafka | Flume Sink日志到Kafka&HDFS

记录下将服务端AC设备产生的数据采集到Flume中,然后基于Flume Sink 把数据日志同时写入到Kafka与HDFS中,对于Kafka中的数据保存到指定的Topic中,然后后续基于Spark Streaming采用Direct的方式,将数据从消息队列中,取出并做处理。 Flume采集日志文件,同时Sink写入到Kafka与HDFS。: agent =ac_online_user,如下: ...

俗人 608

影刀RPA进阶:Excel多条件筛选与数据提取实战

本文详细介绍了如何利用影刀RPA实现Excel多条件筛选与数据提取的自动化。通过拆解文本、数值、日期及颜色筛选等核心指令,并结合实战案例,指导用户构建稳健的销售数据提取机器人,从而高效处理复杂数据报表,提升工作效率。

onion的博客 533

Flume-----选择器和拦截器

flume的选择器和拦截器 1 flume的选择器 flume的选择器是作用在source端,用于将不同event分发到不同的channel里,flume内置的选择器有两种,分别如下: Replicating:复用选择器,作用是将event拷贝到不同的channel里 Multiplexing:多副路选择器,作用是根据不同的条件将不同的event分发到不同的channel里 Replicating选择器的案例演示 需求:将event拷贝到两个channel中,使用两个sink来各自接收一个channel的数

GTmustang的博客 2372

【数字孪生与仿真技术】10:半导体制造中的虚拟量测技术深度解析:从多尺度建模到工业级应用

摘要:半导体制造过程中,晶圆加工需实时监测300+关键参数,传统物理量测技术面临产能损耗、延迟检测等痛点。本文系统阐述虚拟量测(Virtual Metrology)技术的完整解决方案,通过多尺度混合建模实现物理机理与数据驱动的深度融合。内容涵盖等离子体刻蚀、薄膜沉积等关键工艺的物理模型构建,LSTM神经网络的数据校正算法,以及边缘-云协同的实时部署架构。某12英寸晶圆厂实践表明,虚拟量测技术可减少70%物理量测频次,异常漏检率从18%降至3%,机台利用率提升11%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2554

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数据采集工具Flume高级特性

如果flush到HDFS的时候,数据flush了一半之后出问题了,这意味着已经有一半的数据已经发送到HDFS上面了,现在出了问题,同样需要调用doRollback方法来进行回滚,回滚并没有“一半”之说,它只会把整个takeList中的数据返回给channel,然后继续进行数据的读写。如 Sink取数据慢,而 Source 放数据速度快,容易造成 Channel 中数据的积压,如果 putList 中的数据放不进去,会如何呢?Flume在数据进行采集传输的时候,有可能会造成数据的重复,但不会丢失数据。

qq_43408367的博客 707

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

阿年的博客 1547

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Flume案例十:多路复用通道选择器(Multiplexing Channel Selector)

Flume案例十:多路复用通道选择器(Multiplexing Channel Selector) 选型:  Flume-1:taildir source + memory channel + avro sink + Multiplexing Channel Selector(多路复用渠道选择器)  Flume-2:avro source + memory channel + logger sink  Flume-3:avro source + memory channel + logger sink

扛麻袋的少年的博客 2591

flume配置选择器、处理器、拦截器详解

目录 一、Selector(选择器) Selector概述 复制模式 多路复用(路由)模式 二、Interceptors(拦截器) Interceptors概述 1、Timestamp Interceptor 2、Host Interceptor 3、Static Interceptor 4、UUID Interceptor 5、Search and Replace Inte...

snail_bing的博客 2880

Flume其二,自定义拦截器、选择器、自动容灾、负载均衡

Flume的自定义拦截器、复制选择器、多路选择器、自动容灾、负载均衡

出发行进 1368

flume Channel选择器

简介 channel处理器用于决定source接收的时间写入哪个channel,由其通知channel,并将时间写入。 选择器类型 flume自带两种选择器: 1.relicating(复制选择器),默认使用 2.multiplexing(多路复用选择器) 1.复制选择器 复制选择器会复制每个source接收的事件,将事件复制并分发到所有channel,可通过配置参数,控制分发的channel。 ...

SW_LCC的博客 2724

Flume_拦截器、选择器、Sink组

拦截器(interceptor)拦截器是简单插件式组件,设置在Source和Source写入数据的Channel之间。每个拦截器实例只处理同一个Source接收到的事件。因为拦截器必须在事件写入channel之前完成转换操作,只有当拦截器已成功转换事件后,channel(和任何其他可能产生超时的source)才会响应发送事件的客户端或sink,因此在拦截器中进行大量重量级的处理并不是一个好主意。如果

Regan_Hoo的博客 3238

Flume之选择器:复制和多路复用(比喻化理解

Flume 的 Channel 选择器(Channel Selector)决定了。,就像 “一个快递员同时给多个收件人发相同的包裹”。(类似包裹上的 “地址标签”),将数据路由到。,就像 “快递员按收件地址分区域派送”。将同一个 Event(数据)根据 Event 的。

全局可见 924

Flume入门--万字详解

Flume基础架构、安装部署、入门案例、断点续传源码修改

qq_73181349的博客 1937

【flume】详细介绍及使用

1.Flume简介 Apache flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统,用于有效地收集、聚合和将大量日志数据从许多不同的源移动到一个集中的数据存储(如文本、HDFS、Hbase等)。 其使用不仅仅限于日志数据聚合。因为数据源是可定制的(内置Avro,ThriftSyslog,Netcat),Flume可以用于传输大量事件数据,包括但不限于网络流量数据、社交媒体...

东北溜达滑的博客 1075

Flume的学习及使用

第一章:Flume的简介 1.1 大数据处理流程 在企业中,大数据的处理流程一般是: 1.数据采集 2.数据存储 3.数据清洗 4.数据分析 5.数据展示 参考下图: 1.2 Flume的简介 Flume是一种分布式的,可靠的、高可用的服务,用于有效地收集,聚合和移动大量日志数据。它具有基于流数据流的简单灵活的体系结构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。 参考官网: http://flume.apache

xhzxhz12的博客 1114
上一篇: sqoop hdfs-->mysql
下一篇: flume 设置 ‘HA‘模式
JNWsong
博客等级 码龄9年 287粉丝 204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值