首先是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. vue导航栏跳转路由
  2. 机器视觉:图像与视频朝向检测
  3. 增强型的for循环linkedlist_LinkedList的复习
  4. 【2019CSP-J 普及组题解】数字游戏(number),公交换乘(transfer),纪念品(souvenir),加工领奖(work) CSP普及游记
  5. Vue表格中,对数据进行转换、处理
  6. 外设驱动库开发笔记23:AT24Cxx外部存储器驱动
  7. oracle inside(4)
  8. 好用的markdown编辑工具Ulysses 25 for Mac
  9. 论文阅读笔记(十四)——基于大比例圈养大熊猫图像的大熊猫识别研究
  10. 配置zabbix当内存剩余不足10%的时候触发报警
  11. SQL数据库修复/数据库置疑修复
  12. IP地址自动切换脚本
  13. 资源 | 11个免费矢量免抠素材网站
  14. python/Matplotlib绘制复变函数图像
  15. 日本“性爱机器人”上线1小时被抢空
  16. Web 面试之 HTTP和浏览器
  17. java性能调优指南,就是这么简单
  18. 大家能不能在百忙之中 想想鸟姐的话
  19. ESP32远程OTA指令升级bin固件
  20. 四十七、使用bootstrap中的选项卡制作产品特色页面

热门文章

  1. idempiere mysql_iDempiere 使用指南 销售发货流程
  2. 如何在KeyShot中设置材质模板?
  3. 加密压缩防360云上传
  4. 压力测力称重传感器如何标定怎么校准?
  5. 新零售时代,即拼商城模式如何做?
  6. PCM 大端(S16BE)和小端(S16LE)分析,及转换
  7. C# 电脑上提示未知发布者
  8. 光伏发电系统模拟及其发电预测开源python工具pvlib
  9. 代理 IP 随机 隐藏
  10. nginx php返回500错误,解决Nginx服务返回500状态码问题