flume ChannelSelector -- channel 选择器
首先是flume中三个组件的单词的意思,flume:水道;笕槽;引水槽,source:水源,channel:水渠,sink:水槽。见文知意,就是水从源头流出来,经过水渠或者管道,最终流到终点,也就是水槽了。之前总是flume的叫着,也不知道是啥意思,今天查了一下,再看其他几个组件的意思,这个工具的功能不言而喻了,就是针对像水一样的数据流处理的。
flume channel selectors允许给一个source可以配置多个channel的能力。这种模式有两种方式,一种是用来复制(Replication),这也是默认配置,另一种是用来分流(Multiplexing)。
Flume中channel选择器(selector.type配置)必须实现ChannelSelector接口,实现了该接口的类主要作用是告诉Source中接收到的Event应该发送到哪些Channel,在Flume中主要由两个实现方式:
1,复用,实现类:MultiplexingChannelSelector (Multiplexing n. 多路技术 多路复用)
2,复制,实现类:ReplicatingChannelSelector (Replicate n. 复制品)
如果没有手动配置,source的默认channel选择器类型是replicating(复制),当然这个选择器只针对source配置了多个channel的时候。
一个souce可以向多个channel同时写数据,所以也就产生了以何种方式向多个channel写的问题(比如自带的复制选择器,会把数据完整地发送到每一个channel,而多路分发选择器就可以通过配置来按照一定的规则进行分发,听起来很像负载均衡),channel选择器也就应运而生。
复制选择器 (默认)
a1.sources = r1
a1.channels = c1 c2 c3a1.sources.r1.selector.type = replicating
a1.sources.r1.channels = c1 c2 c3
#这意味着c3是可选的,向c3写入失败会被忽略。但是向c1,c2写入失败会出错
a1.sources.r1.selector.optional = c3
上面这个例子中没有声明sink,c3配置成了可选的。向c3发送数据如果失败了会被忽略。c1和c2没有配置成可选的,向c1和c2写数据失败会导致事务失败回滚。
多路复用选择器
a1.sources = r1
a1.channels = c1 c2 c3 c4a1.sources.r1.selector.type = multiplexing
#以每个event的header中的state这个属性的值作为选择channel的依据
a1.sources.r1.selector.header = state
#如果state=CZ,则选择c1这个channel
a1.sources.r1.selector.mapping.CZ = c1
#如果state=US,则选择c2 和 c3 这两个channel
a1.sources.r1.selector.mapping.US = c2 c3
#默认使用c4这个channel
a1.sources.r1.selector.default = c4
选择器会对每个event的header里面的state属性值进行匹配,如果state=CZ就把event发给c1,如果state=US就把event发给c2和c3,其余的发给默认的c4。
自定义选择器
自定义选择器就是你可以自己写一个org.apache.flume.ChannelSelector接口的实现类。老规矩,你自己写的实现类以及依赖的jar包在启动时候都必须放入Flume的classpath。
a1.sources = r1
a1.channels = c1a1.sources.r1.selector.type = com.lxk.flume.custom.BalanceChannelSelector
要自定义自己的channel 选择器,比如上面的负载均衡的channel选择器,因为上面系统提供的2个原生的选择器要么全复制,要么选择性的改变数据流向,现在想增加channel数量,缓解压力,数据就需要均衡的发布到声明的n个channel里面去。要自定义,就得了解这个选择器的实现。channel 是在 agent 上暂存 event 的缓冲池。 event由source添加,由sink消费后删除。
flume ChannelSelector -- channel 选择器相关推荐
- Flume的Channel
一.Memory Channel 事件将被存储在内存中(指定大小的队列里) 非常适合那些需要高吞吐量且允许数据丢失的场景下 属性说明: 二.JDBC Channel 事件会被持久化(存储)到可靠的数据 ...
- 大数据Hadoop、Hive、Kafka、Hbase、Spark等框架面经
大数据组件 学习路线: 阶段1:学习绿色箭头的知识点: 阶段2:学习红色箭头的知识点: 阶段3:学习蓝色箭头的知识点: 1 Hadoop 1.1 Hadoop1.x与Hadoop2.x的区别 1.2 ...
- 大数据——Flume组件Source、Channel和Sink具体使用
Flume组件Source.Channel和Sink使用说明 Flume Sources Avro Source 配置范例 Thrift Source 配置范例 Exec Source 配置范例 JM ...
- Flume四:多路复用(ChannelSelector之Multiplexing)+自定义拦截器
案例: 自定义拦截器 pom.xml <dependency><groupId>org.apache.flume</groupId><artifactId&g ...
- Flume 1.9.0用户指南
概述 系统要求 架构 数据流模型 复杂的流程 可靠性 可恢复性 设置 设置 agent 配置单个组件 将各个部分连接在一起 启动 agent 一个简单的例子 在配置文件中使用环境变量 记录原始数据 基 ...
- 大数据技术之 Flume
为什么选用Flume Python爬虫数据 Java后台日志数据 服务器本地磁盘 文件夹 HDFS Flume Flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写入到HDFS. 网络端 ...
- 大数据学习——Flume入门
文章目录 一.Flume概述 1.1.Flume定义 1.2.Flume基础架构 二.Flume快速入门 2.1.安装Flume部署 2.2.入门案例 2.2.1.监控端口数据(官方案例) 2.2.2 ...
- Flume原理和使用
Flume原理和使用 1.定义 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统. Flume基于流式架构,灵活简单. 2.基础架构 2.1 Agent ...
- Flume知识点全面总结教程
目录 1.前言 1.1什么是flume? 1.2Flume特性 2.Flume核心概念 2.1agent 2.2Event:flume内部数据传输的封装形式 2.3Transaction:事务控制机 ...
最新文章
- 纸上谈兵: AVL树
- openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案...
- 16进制ff转化为二进制_3秒钟快速转换十六进制为二进制
- linux常用网络诊断命令,linux网络常用诊断工具
- Rxjava+Retrofit的使用实例(基于retrofit2.1.0)
- Python Django 重写delete方法实现单个对象的删除
- WebKit Page对象的分析
- [计算机网络]探索ICMP协议
- Linux系统查看硬件相关信息
- 基于Spark的机器学习实践 (三) - 实战环境搭建
- pku 3270 Cow Sorting 置换群
- Centos6.x X64 飞信安装
- delphi OleVariant转换RecordSet
- 微波工程(7)——谐振器理论
- 机载Lidar数据滤波方法研究
- Norms for Vectors and Matrices
- Gephi报错cannot load even default layout, using internally predefined configuration解决方法
- c 语言 时间间隔(多实例测试)
- vim和emac体验
- HC-05蓝牙模块,在AT指令模式时输出AT+NAME?无应答问题