Kettle优化就这么多

Kettle正常转换速度

场景

正常

不正常

数据库操作

3k-2w/

2000/秒以下

文件操作

2w/秒以上

1w条以下

httpgetset

比数据库慢

 

 

容易产生性能问题的场景

 

查询类:

数据库查询:数据库查询、数据库连接、插入更新

Web查询 :http/get/set webservice

 

计算类

格式转换(字节与字符互相转换,日期)、

转换一般用计算器和JavaScript方法。

 

排序类

排序、合并连接(依赖于排序)、分组(依赖于排序)

 

调优的关键:Rowset

Rowset是两个步骤之间的缓存(大小可以自己设置)

如何找到性能瓶颈:观察Rowset,运行ktr文件时观察下面的窗口值(100/0表示输入100条记录,输出0条记录。如果输入远大于输出,就说明这个步骤来不及处理,就是瓶颈。)

 

Rowset值的设置:编辑》设置》杂项》记录集合里的记录数》10000,表示缓存里的最大记录数就是10000

其他观察方法:性能图,和步骤度量效果一样。

 

如何提高性能

合理增加索引

数据库查询:尽可能多的使用相等=判断来筛选数据;如果是等值查询,表就建hash索引;如果是比较查询,就建B树索引

增加复制数:查询类。多线程,2-8个线程一个步骤。具体自己调整。

加大缓存:排序类,查询类。

集群:查询类、运算类、排序

更换其他的实现方式:JavaScriptJava

注意日志级别:Rowlevel的性能是Basic级别的1/10

 

.spoonrc.kettle目录下

 

注意死锁问题

数据库表死锁:读写同一个表(表现是ktrrunning,卡在那不动)

转换本身死锁:

 

这里死锁的原因:排序记录要求将所有的记录都读取到之后再排序,缓存设置10000,发完要下游处理完才能再次发送。这样以来排序需要更多数据,而表输入是复制记录到两个下游,一个要更多的数据,一个不要更多的数据。所以,死锁。

解决办法:

 

 

### 如何优化 Kettle 的性能 为了提升 Kettle (Spoon) 的性能和使用体验,可以从以下几个方面入手: #### 1. 数据流设计优化 合理的设计数据流能够显著减少不必要的计开销。例如,在转换过程中应尽量避免过的数据复制和冗余操作[^2]。 - **字段选择**: 只保留必要的字段传递给下游组件,通过 `字段选择` 组件剔除不需要的列,这不仅可以降低内存占用,还能加快后续处理速度。 - **条件分发**: 利用 `条件分发` 或 `Switch/Case` 来分流数据,而不是依赖复杂的 SQL 查询来完成筛选逻辑。这种方式更高效且易于维护。 #### 2. 并策略 充分利用硬件资源是提高 ETL 工具性能的关键之一。可以通过调整线程数量或者拆分大任务为个子任务实现并发处理[^1]。 - 设置合适的步数(step): 对于 I/O 密集型作业(如文件读取),增加步骤数目可能带来好处;而对于 CPU 密集型任务,则需谨慎设定以免造成竞争状况。 - 启用集群模式: 如果环境支持分布式部署,考虑启用 PDI 集群功能让不同节点共同承担负载。 #### 3. 存储介质管理 针对不同的存储媒介采取相应的措施也会影响整体表现: - 尽量采用本地磁盘而非网络共享作为临时目录位置. - 当面对海量数据时,可选用压缩格式保存中间结果以节省空间并加速传输过程. #### 4. 参数调优建议 一些内置参数同样值得重视: - 调整缓冲区大小(Buffer Size),适当增大缓存容量有助于缓解频繁交换带来的延迟问题。 - 关闭无意义的日志记录(Logging Level),仅保留错误级别以上的消息输出即可满足调试需求同时减轻系统负担。 以下是基于 Python 实现的一个简单示例脚本来动态修改 kettle 属性配置项: ```python import xml.etree.ElementTree as ET def update_kettle_config(file_path, new_buffer_size): tree = ET.parse(file_path) root = tree.getroot() buffer_element = root.find('.//property[@name="BUFFER_SIZE"]') if buffer_element is not None: buffer_element.text = str(new_buffer_size) tree.write(file_path) update_kettle_config('config.xml', '50MB') # 修改buffer size至50MB ``` ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值