【Flume中间件】(8)channel选择器副本机制

本文涉及的产品
性能测试 PTS,5000VUM额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 【Flume中间件】(8)channel选择器副本机制

channel选择器副本机制

我们现在的需求就是实时的监听一个文件的变化,然后将变化的数据上传到HDFS,另外需要在本地文件系统保存副本,所以此次的sink去向有两个,一个是HDFS,另外一个就是本地文件系统。

其实我们可以用一个flume就可以实现将第一个flume的sink分别设置为两个去向,为什么下图要多用两个flume呢?是因为有时HDFSsink端写数据较慢,生产数据较快,那就有可能生产大于消费,刚开始还可以在channel进行缓存,如果channel也满了就会崩掉,多两个flume也是为了增加缓冲。

上图我们可以看到第一个flume从source监听数据,然后交给两个channel,这就需要两个channel收到的数据是一致的,所以channel选择器需要配置成副本,然后两个channel分别发往对应的sink,这里sink采用的是avro,它是用于两个flume之间联系的组件,如果两个flume需要联系,上一个flume的sink就要配置avro,下端的flume的source也要配置相应的avro。

avro的sink就是将数据发往指定IP的某个端口,avro的source就是从某个IP地址的指定端口进行获取数据。

Flume2配置的就是avrosource,然后sink端就是HDFS。

Flume3同样配置avro,但是sink端配置的是file_roll,用于传输到本地文件系统

Flume1

a1.sources = r1
a1.sinks = k1 k2
a1.channels = c1 c2
a1.sources.r1.selector.type=replicating
a1.sources.r1.type = taildir
a1.sources.r1.channels = c1
a1.sources.r1.positionFile = /opt/module/flume/position/position.json
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /home/hadoop/data3/data
a1.sinks.k1.type = avro
a1.sinks.k1.hostname=hadoop102
a1.sinks.k1.port=4141
a1.sinks.k2.type = avro
a1.sinks.k2.hostname=hadoop102
a1.sinks.k2.port=4142
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.channels.c2.type = memory
a1.channels.c2.capacity = 1000
a1.channels.c2.transactionCapacity = 100
a1.sources.r1.channels = c1 c2
a1.sinks.k1.channel = c1      
a1.sinks.k2.channel = c2

Flume2

a2.sources = r1
a2.sinks = k1
a2.channels = c1
a2.sources.r1.type = avro
a2.sources.r1.bind=hadoop102
a2.sources.r1.port=4141
a2.sinks.k1.type = hdfs
# 配置hdfs存储的路径,这里我设置的是动态路径,按照时间命名的文件夹
a2.sinks.k1.hdfs.path=hdfs://hadoop102:9000/flume/%Y%m%d/%H
# 给存储到HDFS的文件加个前缀标明该数据为日志信息
a2.sinks.k1.hdfs.filePrefix=logs-
# 是否按照时间进行滚动文件夹,对应上面配置的动态文件夹
a2.sinks.k1.hdfs.round=true
a2.sinks.k1.hdfs.roundValue=1
# 设置时间量级为秒、分钟还是小时
a2.sinks.k1.hdfs.roundUnit=hour
# 是否使用本地时间戳,我测试了一下,如果这里设置成false,HDFS目录不会发生变化,可能是hdfs配置的动态时间路径就是按照时间戳配置的
a2.sinks.k1.hdfs.useLocalTimeStamp=true
# 积攒多少个Event才会flush到HDFS
a2.sinks.k1.hdfs.batchSize=1000
# 文件类型
a2.sinks.k1.hdfs.fileType=DataStream
# 多久会生成一个新的文件,如果监听的文件没有变化,尽管到了时间也不会产生新文件,产生新文件需要事件去触发
a2.sinks.k1.hdfs.rollInterval=30
# 每个文件大小达到多少会进行滚动
a2.sinks.k1.hdfs.rollSize=134217700
# 设置文件的滚动与事件无关
a2.sinks.k1.hdfs.rollCount=0
a2.channels.c1.type = memory
a2.channels.c1.capacity = 1000
a2.channels.c1.transactionCapacity = 100
a2.sources.r1.channels = c1
a2.sinks.k1.channel = c1      

Flume3

a3.sources = r1
a3.sinks = k1
a3.channels = c1
a3.sources.r1.type = avro
a3.sources.r1.bind=hadoop102
a3.sources.r1.port=4142
a3.sinks.k1.type = file_roll
a3.sinks.k1.sink.directory = /home/hadoop/data4/flume
a3.channels.c1.type = memory
a3.channels.c1.capacity = 1000
a3.channels.c1.transactionCapacity = 100
a3.sources.r1.channels = c1
a3.sinks.k1.channel = c1      

这样当我们向data文件中追加数据,整个flume流程就将我们追加的数据以副本机制分别传输到HDFS和本地文件系统。


目录
相关文章
|
1月前
|
分布式计算 Java Hadoop
Hadoop-18 Flume HelloWorld 第一个Flume尝试!编写conf实现Source+Channel+Sink 控制台查看收集到的数据 流式收集
Hadoop-18 Flume HelloWorld 第一个Flume尝试!编写conf实现Source+Channel+Sink 控制台查看收集到的数据 流式收集
31 1
|
8天前
|
JavaScript 安全 中间件
深入浅出Node.js中间件机制
【10月更文挑战第36天】在探索Node.js的奥秘之旅中,中间件的概念如同魔法一般,它让复杂的请求处理变得优雅而高效。本文将带你领略这一机制的魅力,从概念到实践,一步步揭示如何利用中间件简化和增强你的应用。
|
20天前
|
消息中间件 JavaScript 中间件
深入浅出Node.js中间件机制
【10月更文挑战第24天】在Node.js的世界里,中间件如同厨房中的调料,为后端服务增添风味。本文将带你走进Node.js的中间件机制,从基础概念到实际应用,一探究竟。通过生动的比喻和直观的代码示例,我们将一起解锁中间件的奥秘,让你轻松成为后端料理高手。
24 1
|
1月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
44 1
|
1月前
|
JSON JavaScript 中间件
深入浅出Node.js中间件机制
本文将带你探索Node.js中一个核心概念——中间件机制。我们将通过浅显的语言和生动的比喻,揭示中间件如何作为请求和响应之间的“交通枢纽”,在应用程序中起到至关重要的作用。从基础原理到实际应用,你将了解到中间件不仅简化了代码结构,还提高了开发效率,是Node.js开发不可或缺的一部分。
48 1
|
1月前
|
JavaScript 安全 中间件
深入浅出Node.js中间件机制
【10月更文挑战第4天】在探索Node.js的海洋中,中间件机制犹如一座灯塔,为开发者指引方向。本文将带你一探究竟,从浅入深地理解这一核心概念。我们将通过生动的比喻和实际代码示例,揭示中间件如何在请求和响应之间搭建桥梁,实现功能的扩展与定制。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
43 0
|
3月前
|
数据采集 存储 Apache
Flume核心组件大揭秘:Agent、Source、Channel、Sink,一文掌握数据采集精髓!
【8月更文挑战第24天】Flume是Apache旗下的一款顶级服务工具,专为大规模日志数据的收集、聚合与传输而设计。其架构基于几个核心组件:Agent、Source、Channel及Sink。Agent作为基础执行单元,整合Source(数据采集)、Channel(数据暂存)与Sink(数据传输)。本文通过实例深入剖析各组件功能与配置,包括Avro、Exec及Spooling Directory等多种Source类型,Memory与File Channel方案以及HDFS、Avro和Logger等Sink选项,旨在提供全面的Flume应用指南。
128 1
|
3月前
|
数据采集 存储 Java
Flume Agent 的内部原理分析:深入探讨 Flume 的架构与实现机制
【8月更文挑战第24天】Apache Flume是一款专为大规模日志数据的收集、聚合及传输而设计的分布式、可靠且高可用系统。本文深入解析Flume Agent的核心机制并提供实际配置与使用示例。Flume Agent由三大组件构成:Source(数据源)、Channel(数据缓存)与Sink(数据目的地)。工作流程包括数据采集、暂存及传输。通过示例配置文件和Java代码片段展示了如何设置这些组件以实现日志数据的有效管理。Flume的强大功能与灵活性使其成为大数据处理及实时数据分析领域的优选工具。
104 1
|
3月前
|
JavaScript 中间件 开发者
深入浅出Node.js中间件机制
【8月更文挑战第31天】本文将带你领略Node.js中间件的奥秘,通过直观的案例分析,揭示其背后的设计哲学。你将学会如何运用中间件构建强大而灵活的后端应用,以及在面对复杂业务逻辑时如何保持代码的清晰与高效。
|
3月前
|
设计模式 JavaScript 中间件
深入浅出Node.js中间件机制
【8月更文挑战第31天】在Node.js的世界里,中间件如同魔法般存在,它让复杂的请求处理变得井然有序。本文将带你领略中间件的奥秘,从原理到实战,一步步揭开它的神秘面纱。你将学会如何运用中间件来构建强大而灵活的后端应用,就像拼乐高一样有趣。