Flume事务

news2024/11/6 11:33:16

Flume事务

在这里插入图片描述

  1. 在Flume中一共有两个事务
    ·Put事务:在Source组件和Channel组件之间,保证Source组件到Channel组件之间数据传递的可靠性。
    ·take事务:在Channel组件和Sink组件之间,保证channel组件到Sink组件之间数据传输的可靠性。
  2. Put事务流程
    ① source组件采集外部数据到agent内部,并且将数据包装为事件
    ② source组件开始将事件传输到Channel组件中
    ③ 首先,会开启事务,在事务内部,通过doPut方法将一批数据放入到putlist中存储。
    ④ 之后,调用doCommit方法,把putList中的所有Event放到Channel中,成功之后就清空putList
  1. putList在像channel中发送数据前会先检查channel中的容量是否放得下,放不下一个都不会放,调用doRollback
  2. 调用doRollback方法后,doRollback方法会进行两步操作: ·将putList清空 ·抛出ChannelException异常。
  3. source组件会捕捉到doRollback抛出的异常后,source就将刚才的一批数据重新采集,然后就开启一个新的事务。
  4. 数据批的大小取决于Source组件的配置参数batch size的值
  5. putList的大小取决于Channel组件的配置参数transactionCapacity的值(capacity参数是指Channel的容量)

思考:put事务能否保证采集数据不丢失?
3. Take事务流程
① Sink组件不断的轮询Channel,当其中有新的事件到达时,开启take事务
② take事务开启后,会调用doTake方法将Channel组件中的Event剪切到takeList中。
③ 当takeList中存放了batch size数量的Event之后,就会调用doCommit方法
④ doCommit方法中,首先会将数据写出到外部系统,成功后就会清空takeList。
⑤ 当事务失败时,就会调用doRollback方法来进行回滚,就是将takeList中的数据原封不动的还给channel。
当take事务失败时,可能向外部写了一半的数据了,但是回滚时,是将tabkeList中的全部数返给channel,当开启新的take事务时,又会将这批数据再次写出到外部,就造成了数据重复。
思考:take事务可能造成数据重复,如何避免呢?

Flume Agent内部原理

在这里插入图片描述
在这里插入图片描述

  1. 执行流程
    ① Source组件采集外部数据到agent内部,并包装为Event
    ② 然后,将事件发送到ChannelProcessor中,
    ·通过拦截器链中每个拦截器的拦截过滤,符合要求的Event会返回到ChannelProcessor中
    ·在通过ChannelSelector,根据不同的选择器来决定Event去往哪个Channel,然后返回到ChannelProcessor
    ③ 开启Put事务,将批量的Event发送到Channel中
    ④ 更具SinkProcessor组件配置的类型不同,实现相应的功能(负载均衡或故障转移),最终都会且同一时刻只能有一个Sink去拉取数据。
    ⑤ Sink组件不断的轮询Channel,当有新的Event到达Channel时,向外部系统写出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法拾遗三十二bfprt算法,蓄水池算法

算法拾遗三十二bfprt算法,蓄水池算法 在无序数组中求第k小的数快排解法bfprt解法 练习题目蓄水池算法bfprt 应用 在无序数组中求第k小的数 快排解法 // 改写快排,时间复杂度O(N)// k > 1public static int minKth2(int[] array, int k) {int[] arr …

HNU计算机图形学-作业一

任务一:创建交互式三维场景 前言 完整工程文件 具体运行环境配置看这个栏目的第一篇文章 专选课计算机图形学的第一次作业,老师是第一次给本科生上课,用的作业是香港中文大学的计算机图形学的作业内容(老师就是这个学校毕业&a…

软件测试方法 -- 等价类边界值

测试用例的定义 测试用例是为了特定的目的而设计的一组测试输入、执行条件和预期的结果,以便测试是否满足某个特定需求。通过大量的测试用例来检验软件的运行效果,他是指导测试工作进行的依据。 下面我们介绍几种常用的黑盒测试方法 等价类划分法 定…

微信小程序实用工具——渐变色按钮(一)

今日推荐💁‍♂️ 2023五月天演唱会🎤🎤🎤大家一起冲冲冲🏃‍♂️🏃‍♂️🏃‍♂️ 文章目录 今日推荐💁‍♂️🏖️开头介绍 👨‍🏫1️⃣ 按钮一…

【数学建模】 非线性规划+二次规划

非线性规划概念和实例 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不象线性规划有单纯形法这一通用方法,非线性规划目前还没有适于各…

大咖驾到:XR云新未来|弹性算力赋能可交互、沉浸式商业实践

活动背景 XR市场作为数字化经济的重要发展方向,成为各大企业竞相布局的焦点。技术的进步和应用场景的扩大,为企业抢占XR市场先机、实现商业化带来了巨大机遇,同时也带来了技术挑战和成本压力。如何在竞争激烈的市场中脱颖而出,成…

【每日挠头算法题(3)】字符串解码|数组中重复的数字

每日挠头算法题 一、字符串解码思路:栈具体代码如下: 二、数组中重复的数字思路1:计数法具体代码如下: 思路2:原地交换法具体代码如下: 总结 一、字符串解码 点我直达~ 思路:栈 这道题怎么看都…

python 爬虫某东网商品信息 | 没想到销量最高的是

哈喽大家好,我是咸鱼 好久没更新 python 爬虫相关的文章了,今天我们使用 selenium 模块来简单写个爬虫程序——爬取某东网商品信息 网址链接:https://www.jd.com/ 完整源码在文章最后 元素定位 我们需要找到网页上元素的位置信息&#x…

Spring内容

(195条消息) 超高频面试题系列之----Spring全家桶(面试亲测)_spring全家桶面试题_zyyn_未来可期的博客-CSDN博客 1、推断构造方法: (1)如果只有一个构造方法,没问题就用这个 (2)如…

Java学习路线(26)——XML与设计模式

一、XML (一)XML的概念: XML是可扩展标记语言(Extensible Markup Language),一种数据表示形式,可以描述非常复杂的数据结构,常用于传输和存储数据。 (二)XM…

day50|动态规划11-买卖股票的最佳实际3-4(限制买卖次数的情况)

123.买卖股票的最佳时机III 确定递归函数,当前的每一个状态都由前一天决定。 以dp[i][1]和dp[i][2]为例讲解递归函数的含义: dp[i][1]max(dp[i-1][1],dp[i-1][0]-prices[i]) 含义: 第i天的股票第一天持有状态有两种,一种是前一…

电脑msvcr100.dll丢失的解决方法(一键修复方法)

msvcr100.dll是Microsoft Visual C运行时库的组成部分之一,它是一个重要的动态链接库(DLL)文件,可在Windows操作系统上运行。它包含了许多C/C语言程序库函数的实现,常常被用于支持和调用不同软件程序的运算&#xff0c…

POSTGRES、MYSQL插入数据的UPDATE_INSERT实践

POSTGRES: 1、创建表 create table tbl_user( id serial PRIMARY KEY, name varchar(256), addr varchar(256), age int, score int, fav varchar(256) ); 2、创建唯一约束 alter table tbl_user add constraint name_add_age_unique unique(name,addr,age); 3、首先插入两条数…

Ansible自定义静态资产以及常用模块

静态资产 文件文件,一个格式类似于INI的文件 默认情况下,Ansible的资产文件位于/etc/ansible/host,如果使用pip安装的则可能没有这文件,可以自己创建。 1、自定义资产 #自定义编写inventory.ini文件 1.1.1.1 2.2.2.2 3.3.3.[1:15]…

【C++】—— 模板介绍

前言: 在之前的学习中,我们已经对几个常见的STL库容器进行了详细的讲解,并且进行了模拟实现帮助大家立即。接下来,我们要介绍的就是关于 “模板” 的基本知识。 目录 前言 (一)非类型模板参数 1、基本介…

Splashtop 推出首款专门面向创作者和创意工作室的高性能远程软件

2023年5月3日 加利福尼亚州库比蒂诺 Splashtop 在简化随处办公的远程解决方案领域处于领先地位,公司今天宣布推出 Splashtop Business Access Performance,这是一款全新的远程访问解决方案,针对独立艺术家、游戏玩家、建筑与设计以及创意公司…

Opencv项目实战:基于dlib的疲劳检测

文章目录 一、项目简介二、算法原理三、环境配置3.1、dlib人脸检测器:dlib.get_frontal_face_detector()3.2、dlib关键点定位工具:shape_predictor_68_face_landmarks.dat 四、项目实战(加载视频)五、项目实战(摄像头获…

软件测试猿和bug的爱恨情仇

对程序猿来说改bug可以位列开发过程中最讨厌的事之首了,这么讲应该没有人会反对吧?因为就连Java之父詹姆斯高斯林也很讨厌Bug。 另一方面对于测试猿来说工作职责就是尽可能多地找出bug,并确保其得以解决。所以被程序猿视为眼中钉肉中刺的bug可…

Doris半结构化数据分析(倒排索引使用)快速入门

1. 背景 Apache Doris2.0 基于Apache Doris向量化MPP引擎,增加了倒排索引和半结构化JSON数据支持,更好地满足日志存储、检索、分析需求。与基于ES的日志存储方案相比,有如下优势: 性价比提升:存储成本降低50%以上&am…

‍☠️stm32Cubemx欠采样原理讲解与实现 采集高频信号

🏴‍☠️STM32Cubemx ADCTIMDMA欠采样采集高频信号 本文主要讲解ADC借助欠采样采集高频信号,比如使用100k左右的采样率去采集1M的信号。 所需工具: 开发板:STM32F103RCT6STM32CubeMXIDE: Keil-MDK 相关文章: STM32HAL ADCTIM…