前言:
kettle 虽然作为较成熟稳定的数据处理工具,但也存在一些需要优化地方,如果没有深入了解kettle当出现类似产品问题的时候,可能会就束手无策了。今天就和大家聊聊kettle中缓存机制,和我们需要注意的点,缓存机制,虽然能提供kettle的效率,但就像基因编码,也会出现编码错误的情况,怎么才能在kettle编码错误的时候及时自动纠正它,做到心中有数,不然作为一款开源软件,不去深入了解的话,怕是出现问题后,会像热锅上的蚂蚁,急的团团转。相信你看了今天这篇文章后,你会对kettle有个深入的了解,会做到心中有数,掌握乾坤。
一、kettle的缓存机制
1、什么是缓存
为什么要重温下缓存的概念呢?因为我们虽然明白缓存是什么?但有时忘了我们为什么会去使用它。缓存就是数据交换的缓冲区(又称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,找到了则直接执行,找不到的话则从内存中查找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
从上面缓存的介绍我们可以知道,缓存是个中间区类似于高速公路,因为电脑CPU是优先访问缓存,因此,缓存在性能上表现肯定是比较优秀的,因此我们该怎么用好缓存呢?
2、kettle中缓存来源
2.1 DB连接
当我们在一个转换中建立好数据连接后,需要让其他转换也能访问使用这个DB连接,此时我们需要将DB连接进行共享,如图所示DB连接共享后就会默认加粗了。
2.2表输入、连接等组件
kettle中的表输入、EXCEL输入,当转换被调用时,表输入和EXCEL输入这些查询数据都会保存至内存中作为缓存,传输给表输出、EXCEL输出等。同样当我们合并记录时,kettle也是将不同数据保存至缓存中,将合并的记录也保存至缓存中,此时如果我们将百万或者上亿级别的数据进行,数据的排序、分组、合并等,容易造成内存溢出。
二、kettle缓存问题处理
1、当更改kettleDB连接,或者大批量的运行批处理作业后,发现作业均在2秒内完成执行了,此时是因为缓存中有错误的数据,导致缓存不能被读取,此时需要清除缓存后才行使用。
2、前面说到通过kettle组件进行大批量的数据排序、分组、合并处理时易导致内存溢出,因此这些操作建议采用SQ进行处理,如果不行可以考虑采用存储过程过程,kettle再调用存储过程来处理后续的操作。
3、建议自动清理组件,定时清理kettle缓存,防范于未然。具体操作可以参考下面链接。
https://blog.csdn.net/qq29061315/article/details/124431449?opsrequestmisc=%257B%2522request%255Fid%2522%253A%2522167025460916800213096037%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&requestid=167025460916800213096037&bizid=0&utmmedium=distribute.pcsearchresult.none-task-blog-2~blog~firstrankecpmv1~rankv31ecpm-1-124431449-null-null.nonecase&utmterm=%E7%BC%93%E5%AD%98&spm=1018.2226.3001.4450