首先是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 选择器相关推荐

  1. Flume的Channel

    一.Memory Channel 事件将被存储在内存中(指定大小的队列里) 非常适合那些需要高吞吐量且允许数据丢失的场景下 属性说明: 二.JDBC Channel 事件会被持久化(存储)到可靠的数据 ...

  2. 大数据Hadoop、Hive、Kafka、Hbase、Spark等框架面经

    大数据组件 学习路线: 阶段1:学习绿色箭头的知识点: 阶段2:学习红色箭头的知识点: 阶段3:学习蓝色箭头的知识点: 1 Hadoop 1.1 Hadoop1.x与Hadoop2.x的区别 1.2 ...

  3. 大数据——Flume组件Source、Channel和Sink具体使用

    Flume组件Source.Channel和Sink使用说明 Flume Sources Avro Source 配置范例 Thrift Source 配置范例 Exec Source 配置范例 JM ...

  4. Flume四:多路复用(ChannelSelector之Multiplexing)+自定义拦截器

    案例: 自定义拦截器 pom.xml <dependency><groupId>org.apache.flume</groupId><artifactId&g ...

  5. Flume 1.9.0用户指南

    概述 系统要求 架构 数据流模型 复杂的流程 可靠性 可恢复性 设置 设置 agent 配置单个组件 将各个部分连接在一起 启动 agent 一个简单的例子 在配置文件中使用环境变量 记录原始数据 基 ...

  6. 大数据技术之 Flume

    为什么选用Flume Python爬虫数据 Java后台日志数据 服务器本地磁盘 文件夹 HDFS Flume Flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写入到HDFS. 网络端 ...

  7. 大数据学习——Flume入门

    文章目录 一.Flume概述 1.1.Flume定义 1.2.Flume基础架构 二.Flume快速入门 2.1.安装Flume部署 2.2.入门案例 2.2.1.监控端口数据(官方案例) 2.2.2 ...

  8. Flume原理和使用

    Flume原理和使用 1.定义 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统. Flume基于流式架构,灵活简单. 2.基础架构 2.1 Agent ...

  9. Flume知识点全面总结教程

     目录 1.前言 1.1什么是flume? 1.2Flume特性 2.Flume核心概念 2.1agent 2.2Event:flume内部数据传输的封装形式 2.3Transaction:事务控制机 ...

最新文章

  1. 纸上谈兵: AVL树
  2. openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案...
  3. 16进制ff转化为二进制_3秒钟快速转换十六进制为二进制
  4. linux常用网络诊断命令,linux网络常用诊断工具
  5. Rxjava+Retrofit的使用实例(基于retrofit2.1.0)
  6. Python Django 重写delete方法实现单个对象的删除
  7. WebKit Page对象的分析
  8. [计算机网络]探索ICMP协议
  9. Linux系统查看硬件相关信息
  10. 基于Spark的机器学习实践 (三) - 实战环境搭建
  11. pku 3270 Cow Sorting 置换群
  12. Centos6.x X64 飞信安装
  13. delphi OleVariant转换RecordSet
  14. 微波工程(7)——谐振器理论
  15. 机载Lidar数据滤波方法研究
  16. Norms for Vectors and Matrices
  17. Gephi报错cannot load even default layout, using internally predefined configuration解决方法
  18. c 语言 时间间隔(多实例测试)
  19. vim和emac体验
  20. HC-05蓝牙模块,在AT指令模式时输出AT+NAME?无应答问题

热门文章

  1. qt把正方形图片修改成圆形图片
  2. Android9.0(Pie) system_server进程学习
  3. 设计一个年度最佳员工表彰大会的策划书
  4. 高光谱遥感影像分类研究进展 --- (15年论文,方法主要是常规处理,但是写的比较细)
  5. SAP ABAP基础知识自学笔记二
  6. 艾默生双检测器(pH/ORP)分析仪1055-01-10-20-32
  7. ディアドラ / 魔剑
  8. 销售漏斗管理方法(转载)
  9. mysql超长文本解决方法
  10. 边缘处理(边界处理)