Flume基础入门

GD32F470驱动TFT屏避坑指南:硬件SPI+DMA刷屏时,为什么你的屏幕会闪烁或错位? 本文详细解析了GD32F470驱动TFT屏时常见的闪烁、错位问题,重点探讨了硬件SPI+DMA配置中的五个关键痛点,包括SPI FIFO处理、数据宽度匹配、内存对齐、分块传输策略及时序优化。通过实战代码示例和性能对比,帮助开发者实现稳定高效的刷屏效果,特别适合嵌入式显示开发人员参考。 阅读详情

官网具体地址:http://flume.apache.org/FlumeUserGuide.html

flume 核心概念

Client:Client生产数据,运行在一个独立的线程

agent:java 进程,运行在日志收集节点上(服务器节点),包含source、channel、sink三个核心组件

source:从Client收集数据,可以处理各种类型各种格式的日志数据。数据封装到事件(event) 里被传递给channel

channel:缓存收集来的数据,保存由Source组件传递过来的Event

sink:从channel中取出数据,发送到目的地。目的地包括hdfs、logger、avro、thrift、ipc、file、Hbase、solr、自定义。

event: event将传输的数据进行封装,是flume传输数据的基本单位,在整个数据的传输过程中,流动的是event,即事务保证是在event级别进行的。 如果是文本文件,通常是一行记录,event也是事务的基本单位。event从source,流向channel,再到sink,本身为一个字节数组,并可携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。 一个完整的event包括:event headers、event body、event信息(即文本文件中的单行记录),其中event信息就是flume收集到的日记记录。

分区:flume事件的数据通常以时间进行分区,通过 agent1.sinks.sink.hdfs.pathse设置,使用具有时间格式的转义序列的子目录。agent1.sinks.sink.hdfs.path=/temp/flume/year=%Y/month=%m/day=%d 以天作为分区粒度。Flume事件被写入的分区由事件heaer 中的timestamp 决定,但是默认情况事件的header 中没有Timestamp ,通过 interceptor(拦截器)添加。

下列为格式转义序列的完整列表:

interceptor(拦截器):拦截器是一种对事件流中事件进行修改删除的组件,它们连接source 并在事件被传递到channel之前对事件进行处理 。

//为source1 增加一个时间戳拦截器,将为source 产生的每个事件添加一个时间戳
agent1.sources.source1.interceptors = interceptor1
agent1.sources.source1.interceptors.interceptor1.type = timestamp

如果存在多级flume 代理,那么创建的时间和写入的时间存在差异,那么使用agent1.sinks.sink1.hdfs.useLocalTimeStamp=true;

事物:flume 使用两个独立的事物分别负责从source 到channel 以及从channel 到sink 的事件传递。

可靠性:flume 中source 到达sink至少一次(at least once )。同一事件有可能重复到达。不论source 还是sink都有可能产生重复。

扇出:从一个source 向多个channel,亦即向多个sink 传递事件。

使用spooling directorysource和hdfs sink 的两层 flume 代理配置:

# First tier agent
--设定agent各组件名字
agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
--设定连接关系
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1

--描述source 来源方式
agent1.sources.source1.type = spooldir
agent1.sources.source1.spoolDir = /tmp/spooldir
--描述sink
agent1.sinks.sink1.type = avro
agent1.sinks.sink1.hostname = localhost
agent1.sinks.sink1.port = 10000

--描述channel
agent1.channels.channel1.type = file
agent1.channels.channel1.checkpointDir=/tmp/agent1/file-channel/checkpoint
agent1.channels.channel1.dataDirs=/tmp/agent1/file-channel/data

# Second tier agent

agent2.sources = source2
agent2.sinks = sink2
agent2.channels = channel2

agent2.sources.source2.channels = channel2
agent2.sinks.sink2.channel = channel2

agent2.sources.source2.type = avro
agent2.sources.source2.bind = localhost
agent2.sources.source2.port = 10000

agent2.sinks.sink2.type = hdfs
--配置hdfs上文件目录位置以及文件名格式
agent2.sinks.sink2.hdfs.path = /tmp/flume
agent2.sinks.sink2.hdfs.filePrefix = events
agent2.sinks.sink2.hdfs.fileSuffix = .log
agent2.sinks.sink2.hdfs.fileType = DataStream

agent2.channels.channel2.type = file
agent2.channels.channel2.checkpointDir=/tmp/agent2/file-channel/checkpoint
agent2.channels.channel2.dataDirs=/tmp/agent2/file-channel/data

启动命令:

这两个代理需要分别运行

先启动agent1:

% flume-ng agent --conf-file 配置文件所在目录 --name agent1  --conf $FLUME_HOME/conf(通用配置所在目录) -Dflume.root.logger=INFO,console

再启动agent2:

% flume-ng agent --conf-file 配置文件所在目录 --name agent2  --conf $FLUME_HOME/conf(通用配置所在目录) -Dflume.root.logger=INFO,console

使用sink 组保证负载均衡或者故障转移

# First tier agent

agent1.sources = source1
--多sink 间用空格
agent1.sinks = sink1a sink1b
--设置sink 组名
agent1.sinkgroups = sinkgroup1
agent1.channels = channel1

agent1.sources.source1.channels = channel1
agent1.sinks.sink1a.channel = channel1
agent1.sinks.sink1b.channel = channel1

agent1.sinkgroups.sinkgroup1.sinks = sink1a sink1b
--设定处理器类型,该处理器循环选择sink分发事件(processor.selector 可更改)
agent1.sinkgroups.sinkgroup1.processor.type = load_balance
agent1.sinkgroups.sinkgroup1.processor.backoff = true

agent1.sources.source1.type = spooldir
agent1.sources.source1.spoolDir = /tmp/spooldir

agent1.sinks.sink1a.type = avro
agent1.sinks.sink1a.hostname = localhost
agent1.sinks.sink1a.port = 10000

agent1.sinks.sink1b.type = avro
agent1.sinks.sink1b.hostname = localhost
agent1.sinks.sink1b.port = 10001

agent1.channels.channel1.type = file
agent1.channels.channel1.checkpointDir=/tmp/agent1/file-channel/checkpoint
agent1.channels.channel1.dataDirs=/tmp/agent1/file-channel/data

# Second tier agent

agent2a.sources = source2a
agent2a.sinks = sink2a
agent2a.channels = channel2a

agent2a.sources.source2a.channels = channel2a
agent2a.sinks.sink2a.channel = channel2a

agent2a.sources.source2a.type = avro
agent2a.sources.source2a.bind = localhost
agent2a.sources.source2a.port = 10000

agent2a.sinks.sink2a.type = hdfs
agent2a.sinks.sink2a.hdfs.path = /tmp/flume
agent2a.sinks.sink2a.hdfs.filePrefix = events-a
agent2a.sinks.sink2a.hdfs.fileSuffix = .log
agent2a.sinks.sink2a.hdfs.fileType = DataStream

agent2a.channels.channel2a.type = file
agent2a.channels.channel2a.checkpointDir=/tmp/agent2a/file-channel/checkpoint
agent2a.channels.channel2a.dataDirs=/tmp/agent2a/file-channel/data

# Second tier agent (running on a different port number)

agent2b.sources = source2b
agent2b.sinks = sink2b
agent2b.channels = channel2b

agent2b.sources.source2b.channels = channel2b
agent2b.sinks.sink2b.channel = channel2b

agent2b.sources.source2b.type = avro
agent2b.sources.source2b.bind = localhost
agent2b.sources.source2b.port = 10000

agent2b.sinks.sink2b.type = hdfs
agent2b.sinks.sink2b.hdfs.path = /tmp/flume
agent2b.sinks.sink2b.hdfs.filePrefix = events-b
agent2b.sinks.sink2b.hdfs.fileSuffix = .log
agent2b.sinks.sink2b.hdfs.fileType = DataStream

agent2b.channels.channel2b.type = file
agent2b.channels.channel2b.checkpointDir=/tmp/agent2b/file-channel/checkpoint
agent2b.channels.channel2b.dataDirs=/tmp/agent2b/file-channel/data

以kafka 为sink :

a1.source=r1
a1.channel=c1
a1.sink=k1

a1.sources.r1.channel=c1
a1.sources.r1.type=spoolDir 
a1.source.r1.spoolDir =/tmp/spoolDir 

a1.sinks.k1.channel  =  c1 
a1.sinks.k1.type  =  org.apache.flume.sink.kafka.KafkaSink 
a1.sinks.k1.kafka.topic  =  mytopic 
a1.sinks.k1.kafka.bootstrap.servers  =  本地主机:9092 
a1.sinks.k1.kafka.flumeBatchSize  =  20 
a1.sinks.k1.kafka.producer.acks  =  1 
a1.sinks.k1.kafka.producer.linger.ms  =  1 
a1.sinks.k1.kafka .producer.compression.type  =  snappy
Flume 入门教程(超详细) 文章目录1. Flume 概述1.1 Flume 定义 1. Flume 概述 1.1 Flume 定义    阅读详情

相关推荐

实战Flume基础

实战flume基础,带你入门,分布式、高可靠的和高可用的日志采集系统,用 来从不同来源的系统中采集、汇总和搬移大容量的日志数据到一个集中式的数据存储中

输入子系统之events消息数据传递

参考链接:http://book.51cto.com/art/200803/66870.htm 在Linux内核中,input设备用input_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过input_event结构体描述),不再需要关心文件操作接口,因为input子系统已经完成了文件操作接口。驱动

u012542095的专栏 332

感应电机无速度传感器FOC控制原理与Simulink仿真实践

无速度传感器FOC控制是电机驱动领域的重要技术,通过算法重构实现仅依赖电气参数的闭环控制。其核心原理基于电机数学模型,利用Clark/Park变换和滑模观测器估算转子位置和转速。这种技术在工业伺服系统中具有显著价值,能有效降低系统成本并提高可靠性。典型应用场景包括纺织机械、风机驱动等需要精确转速控制的设备。本文以感应电机为例,详细解析了无感FOC的Simulink实现方法,特别关注滑模观测器设计和双闭环控制策略,为工程师提供可直接复用的参数调优经验。

weixin_29189987的博客 259

Hadoop大数据技术原理与应用课后习题答案汇总

Hadoop大数据技术原理与应用

m0_46182119的博客 2万+

RK3588芯片CAN总线调试秘籍:SocketCAN与错误帧攻略

RK3588芯片在嵌入式领域凭借8nm工艺和强大性能成为核心控制器。本文详细介绍了其CAN总线配置流程,包括硬件连接、内核驱动配置及SocketCAN命令操作,并深入解析了CAN通信中的错误帧机制及分析方法。通过智能工厂案例,展示了从问题定位到解决方案的全过程,强调了稳定通信对工业应用的重要性。文章为RK3588的CAN总线应用提供了实用技术参考,并对未来智能诊断技术在该领域的应用进行了展望。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 516

基于Simulink的PR(比例谐振)控制器在单相整流中的应用

本文详细介绍了基于Simulink的单相整流系统中PR(比例谐振)控制器的设计与实现方法。首先阐述了PR控制器相较于传统PI控制器的优势,能够有效消除交流信号跟踪中的稳态误差。接着系统讲解了PR控制器的传递函数原理、实用型设计(带带宽)及参数整定方法。通过Simulink建模步骤,包括主功率电路搭建、电压外环PI设计、电流指令生成、PR控制器实现(推荐MATLAB Function方法)和SPWM调制等关键环节。仿真对比显示PR控制在电流跟踪精度(THD仅1.9%)、功率因数(0.998)和动态响应(突变恢

amy_mhd的博客 689

Flume超详细知识点汇总(基础篇)

Flume知识点总结(基础篇)

m0_73541150的博客 1510

Simulink仿真模块-Signal Generator

Signal Generator:生成各种波形 所在的位置库为:Simulink / Sources 模型为: 说明 Signal Generator模块可以产生四种不同波形: 正弦波 方波 锯齿波 随机 可以使用 hertz 或 rad/sec 为单位表示信号参数。双击模型可以选择需要生成的波形,如图所示: 使用默认参数值,可以获得下列波形之一: 波形 波形输出 正弦波 ...

jk_101的博客 2653

大数据开发笔记(六):Flume基础学习

Flume基础 1、Flume是什么? Flume是数据采集,日志收集的框架,通过分布式形式进行采集,(高可用分布式) 本质:可以高效从各个网站服务器中收集日志数据,并且存储到HDFS、hbase 2、Flume可以对接的数据源? Console、RPC、Text、Tail、Syslog、Exec等 3、Flume接受的数据源输出目标? 磁盘,hdfs,hbase, 经过网络传输kafka data->flume->kafka->spark stre...

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 5119

MathType公式使用技巧汇总——Mathtype怎么在word中编辑公式?论文中公式有哪技巧?有哪些注意事项?论文中的公式怎么写?

如果word中到公式编号(2-1)中间的符号如下图........ .......类似与省略号的,这是手动打的空格,公式和编号的位置都是手动敲空格操作的,这种就只是使用MathType写了公式而已,格式上还是很不方便的。**如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。而第二种,是公式里面带的括号符号,他是可以随着公式结构自适应变化的。这时需要将公式插入到一行文字的某处,

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 5万+

SpringAI系列 - MCP篇(二) - MCP Server Boot Starter

此处需注意之前的。

罗小爬的技术宝书 1319

Flume基础【概述、安装、入门案例】

一 Flume概述 1 Flume定义 Flume 是一种分布式、可靠且可用的服务,用于高效收集、聚合和移动大量日志数据。 它具有基于流数据流的简单灵活的架构。 它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有健壮性和容错性。 它使用允许在线分析应用程序的简单可扩展数据模型。 分布式的日志采集、聚合和传输的系统,基于流式架构。 Flume最主要的作用是实时读取服务器本地磁盘的数据,将数据写入到HDFS。 2 Flume基础架构 Agent Agent是一个JVM进程,它以事件的形式将数据从源

weixin_43923463的博客 1962

基于 Qt C++ 的智能工厂数字孪生系统

你想要实现一个基于 Qt C++ 的智能工厂数字孪生系统,核心是 **Qt 3D** 场景搭建 + **实时数据驱动** 设备模型。下面我将为你提供一个完整的解决方案,包含 **核心思路、实现步骤、完整代码示例** 和 **注意事项**。| **渲染层** | 3D 场景搭建、设备模型加载、实时动画渲染、用户交互。| **业务逻辑层** | 数据处理(滤波、转换)、设备状态管理、动画逻辑控制。| **数据层** | 实时采集设备数据(如传感器、PLC、MES 系统),提供数据接口。

寒寒豆豆软件公司的博客 193

轻松入门大数据 第12章 零基础:极速入门日志收集系统Flume 12.1 日志收集框架Flume 12.1.8 Flume部署

轻松入门大数据 第12章 零基础:极速入门日志收集系统Flume 12.1 日志收集框架Flume 12.1.8 Flume部署

代码改变世界 247

Vue3 - 解决报错 Uncaught (in promise) DOMException: Failed to execute ‘insertBefore‘ on ‘Node‘: The node

vue3,报错,vue3报错,Uncaught(inpromise)DOMException:Failedtoexecute'insertBefore'on'Node':Thenodebeforewhichthenewnodeistobeinsertedisnotachildofthisnode,如何解决这个错误,动态渲染,v-if,v-show,insertBefore,详细解决方法,vue3未能在“Node”上执行“insertBefore”:要插入

🏆 前端领域优质创作者 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

flume 基础入门

CDH相关的软件下载地址:http://archive.cloudera.com/cdh5/cdh/5/ cdh-5.7.0 生产或者测试环境选择对应CDH版本时,一定要采用尾号是一样的版本 下载flume: lunx命令: wgethttp://archive.cloudera.com/cdh5/cdh/5/ flume-ng-1.6.0-cdh5.7.0.tar...

u012447842的博客 218

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Apache Flume】Apache Flume快速入门及基础组件概述

Apache FlumeAgent配置模板QuickStart基础组件概述Source-输入源Avro SourceExec SourceSpooling Directory SourceTaildir SourceKafka SourceSink-输出Logger SinkFile Roll SinkHDFS SinkKafka SinkAvro Sink: 将数据写出给Avro SourceChannel-通道Memory ChannelJDBC ChannelKafka ChannelFile Cha

码小白. 896

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Flume入门到实践--Flume的安装与基础概念与安装实战

Apache Flume 是一个高可用、高可靠的分布式系统,用于有效收集、聚合和移动大量日志数据。本文将从Flume的基础概念讲起,逐步深入到安装配置,并提供几个实用的案例。

天冬忘忧的博客 1540

大数据——Flume入门,基础,学习笔记

什么是Flume? Flume是一种分布式,可靠且可用的系统,用于有效地收集,聚合和移动大量日志数据. Flume组成 Agent:Agent是Flume最重要的组成部分,Flume系统就是由一个一个的Agent组成的. Source:Agent的内部组件,用于接收日志数据,并将其封装成一个一个的event,然后传给Channel. event:Flume系统内部将日志数据封装成event进行传输,event的结构是json串. Channel:传输通道,被动的接收Source传来的数据,并进行

yuyangchenhao的博客 382

Flume基础介绍、搭建、入门案例、常用参数

Flume 介绍 官方网址 架构模型 基础架构模型 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yWPIb2o8-1580823341408)(flume/DevGuide_image00.png)] WebServer : 数据源 HDFS : 存储源 Agent : Flume (代理) 包含3个组件 Source : 数据源获取的数据 Channel : ...

dgqg1223 370

03_Flume入门_基础架构

agent: 是一个JVM的进程,采集数据的过程也是运行在JVM上的代码,在进程中包含三大组件(source,channel,sink) source: 源头,对接Web Server,和外界数据进行对接的组件,用来读数据的地方,从外面读数据。需要在这里配置源头是来自哪里 channel:管道,通道;拦截器在这里,可以不加,更重要的是可以起到缓冲的作用,如果source和sink直连,会出现各种问题,source和sink的读取数据不一样,可能会有问题。 sink: 槽,和外界的HDFS或者卡夫卡进行对.

有上进心的阿龙 204

轻松入门大数据 第12章 零基础:极速入门日志收集系统Flume 12.1 日志收集框架Flume 12.1.7 Flume Agent配置文件编写指南

轻松入门大数据 第12章 零基础:极速入门日志收集系统Flume 12.1 日志收集框架Flume 12.1.7 Flume Agent配置文件编写指南

代码改变世界 164

flume的入门和个人理解

Flume初步理解 我们知道光是hadoop来说,是处理死数据的,也就是下载好的文件上传到hdfs中,但是它对大量小文件的上传并不友好,尤其是做不了流式数据上传,这就导致我们在要处理当天不断进入的数据时,十分不便。此时学习Flume,将流式数据文件不断导入hdfs中,猜测主要作用是与hive合用,将导入的数据直接导入hive中数据库的表所在目录。 Flume基础架构 可见,flume更像是一个服务端,java端拿到数据后作为客户端将数据通过flume不断的,流式的储存到了hdfs中 可以将flume的架构

weixin_45425054的博客 318

大数据学习——Flume入门

文章目录一、Flume概述1.1、Flume定义1.2、Flume基础架构二、Flume快速入门2.1、安装Flume部署2.2、入门案例2.2.1、监控端口数据(官方案例)Describe the sinkUse a channel which buffers events in memoryBind the source and sink to the channel2.2.2、实时监控单个追加文件2.2.3、监控文件 升级版2.2.4、监控文件夹变化2.2.5、断点续传——实时监控目录文件追加修改三、

5akura's Blog 3359
上一篇: hive 错误记录
下一篇: kafka及kafka 面试题学习
date-date
博客等级 码龄9年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值