首页 > 其他分享 >flume传输数据报错“Space for commit to queue couldn‘t be acquired. Sinks are likely not keeping up with so”

flume传输数据报错“Space for commit to queue couldn‘t be acquired. Sinks are likely not keeping up with so”

时间:2024-10-19 10:47:52浏览次数:10  
标签:flume Flume java Source 传输数据 报错 Sink Channel

        最近在写一个数据量比较大的项目时候,需要使用flume将kafka中的数据传输到HDFS上进行存储,方便后续的数仓搭建,但是flume在传输数据中却报错如下日志

org.apache.flume.ChannelFullException: Space for commit to queue couldn't be acquired. Sinks are likely not keeping up with sources, or the buffer size is too tight
	at org.apache.flume.channel.MemoryChannel$MemoryTransaction.doCommit(MemoryChannel.java:129)
	at org.apache.flume.channel.BasicTransactionSemantics.commit(BasicTransactionSemantics.java:151)
	at org.apache.flume.channel.ChannelProcessor.processEventBatch(ChannelProcessor.java:194)
	at org.apache.flume.source.kafka.KafkaSource.doProcess(KafkaSource.java:311)
	at org.apache.flume.source.AbstractPollableSource.process(AbstractPollableSource.java:60)
	at org.apache.flume.source.PollableSourceRunner$PollingRunner.run(PollableSourceRunner.java:133)
	at java.lang.Thread.run(Thread.java:748)

        其实关于这个问题,大家需要先知道flume的传输原理,flume是有三大核心组件的,分别是:

(一)Source(数据源)

  1. 作用:Source是Flume的输入端,负责从数据源收集数据
  2. 类型:Flume提供了多种内置的Source,如Avro Source、NetCat Source、Spooling Directory Source等,也支持自定义Source。
  3. 工作原理:Source将收集到的数据传递给Channel,供后续处理。

(二)Channel(通道)

作用:Channel是Source和Sink之间的缓冲区,用于存储Source收集到的数据,并平衡Source收集和Sink读取数据的速度。

类型:Flume提供了多种内置的Channel实现,如Memory Channel、File Channel、Kafka Channel等。

  • Memory Channel:读写速度快,但存储数据量小,适用于内存资源充足且不关心数据丢失的场景。
  • File Channel:存储容量大,无数据丢失风险,适用于对数据可靠性要求较高的场景。

工作原理:Channel线程安全且具有事务性,支持source写失败重复写和sink读失败重复读等操作。它存储的是Source收集并且没有被Sink读取的Event,这些Event可以被视为Flume内部的消息队列。

(三)Sink(数据汇)

作用:Sink是Flume的输出端,负责将数据从Channel中取出,并传递给目标系统或存储。

类型:Flume提供了多种内置的Sink,如HDFS Sink、HBase Sink、Kafka Sink等,也支持自定义Sink。不同的Sink可以将数据发送到不同的目的地,例如File Sink将数据存储到文件中,HDFS Sink将数据存储到Hadoop分布式文件系统中,Kafka Sink将数据发送到Kafka消息队列中等。

工作原理:Sink从Channel中获取数据,并将数据传递到目标系统或存储中,完成数据的持久化存储或传输到其他系统中以便进一步处理和分析。

Flume中的Source、Channel和Sink三个组件相互协作,共同完成了数据的采集、传输和存储任务。它们各自承担着不同的作用,共同构成了Flume这一强大而灵活的海量日志采集、聚合和传输系统。

        简而言之,这个报错的原因就是source在拿到数据,往channel里面写的时候,没地方了,中间的通道,比作池子,流入太快,流出慢,然后,慢慢的,池子就满了,再流就溢出了。

        既然知道原因了,那么就要去解决这些问题

1、流入和流出的时间差

2、增大池子的容量,延缓池子流满的时间

先检查一下flume的配置,是不是source的batchSize比sink的batchSize大,改改让流入慢点,给流出争取时间。

如果这样还不行,那么我建议大家不要再使用Memory Channel管道了,因为这个本事就不适用于数据量很大的场景,更换为File Channel管道,我这里换成Flie之后,数据就成功进入HDFS了

标签:flume,Flume,java,Source,传输数据,报错,Sink,Channel
From: https://blog.csdn.net/xq_123dd/article/details/143068167

相关文章

  • 启动service报错ORA-44317: database open read-only
    ADG(RAC)备库环境,srvctl添加service服务成功,启动service时报错ORA-44317:databaseopenread-only。这是预期行为,使用“srvctladdservice-d<db_name>-s<service_name>”创建服务时,将在OCR中创建和注册服务,但在使用“srvctlstartservice-d<db_name>-s<service_n......
  • 《地狱已满2》游戏报错lpk.dll文件丢失怎么办?玩家必看《地狱已满2》遭遇lpk.dll丢失故
    对于热爱《地狱已满2》这款游戏的玩家来说,遇到“lpk.dll文件丢失”的报错信息无疑是一个巨大的困扰。这个错误通常意味着你的系统中缺失或损坏了lpk.dll这个动态链接库(DLL)文件,它是Windows系统的一部分,用于支持某些音频和多媒体功能。游戏运行时可能依赖这个文件,缺乏它会导致游......
  • python: invalid value encountered in divide以及invalid value encountered in doub
    运行命令pythoneqtl_prepare_expression.pydata.tpm.gctdata.reads_count.gct--tpm_threshold0.1--count_threshold2--sample_frac_threshold0.2--normalization_methodtmm--outputdata.txt时出现了报错“invalidvalueencounteredindivide”以及“invalidvalue......
  • java报错大合集
    ​ D:\代码\Mybatis-84\src\test\java\com\lu\TestNews.java:100:39java:找不到符号 符号: 方法of(int,int) 位置:接口java.util.List解决idea中的jdk变成1..8了而List.of()是9出的所有报错,改回17 在“classjava.lang.String”中没有名为“name”的属......
  • vue,xlsx,xlsx-style,file-saver,生成Excel并导出,cptable报错,合并单元格 样式缺失
    一,安装依赖 二,导入依赖import*asXLSXfrom'xlsx';import*asXLSX_STYLEfrom'xlsx-style'import{saveAs}from'file-saver';三,解决引入xlsx-style./cptable模块找不到问题Thisrelativemodulewasnotfound:*./cptablein./node_modules......
  • prometheus 报错 Error on ingesting samples that are too old or are too far into
    level=warnts=2021-08-16T03:20:04.960Zcaller=scrape.go:1507component="scrapemanager"scrape_pool=mtailtarget=http://18.167.146.20:3903/metricsmsg="Erroroningestingsamplesthataretoooldoraretoofarintothefuture"num_dro......
  • 07-SQL注入(联合注入、报错注入、盲注)
    1、在不依赖于DVWA后端数据库的情况,如何通过前端验证的方法判断DVWA中的注入点是数字型注入还是字符型注入?(提示:用假设法进行逻辑判断)在dvwa靶场中SQLInjection模块输入1and1=1如果是数字型注入输入内容没有被网站进行任何处理,可以查询到输入内容被网站进行处理,通过隐式......
  • spark运行报错:env: “/home/hadoop/anaconda3/envs/pyspark/bin/python3.8“: 没有那
    在进入spark的过程中,出现报错【env:"/home/hadoop/anaconda3/envs/pyspark/bin/python3.8":没有那个文件或目录】,当时我立马就被搞蒙了,百度了各种方法,最终都没有解决。当然有大佬说“进入conf目录下,修改spark-env.sh文件”,这个方法我也进行了修改,最终在终端输入./bin/pyspar......
  • Python中调用R语言代码(rpy)的一些报错和解决
    我搭建网站的过程中,需要将可视化的图下载下来,使用Echarts是比较好看,但是下载的是图片格式(png),项目需求是下载PDF的R绘制的图。所以我这边使用Python调用R代码,借rpy实现这个功能。在Python中调用R代码有多种方式,其中最常用的是通过rpy2库,它允许在Python中运行R代码并获......
  • supervisor使用报错解决
    常用命令supervisorctlstatus查看状态supervisorctlreload重新载入配置文件supervisorctlstartall/ftp启动所有/指定的程序进程supervisorctlstopall/frp关闭所有/指定的程序进程一.简化后的supervisord.conf配置文件内容:[unix_http_s......