一、概述
之前文档中 讲了 一个 Kettle 同步的程序 ,程序设计好了目前拉倒线上测试不行了,程序跑到文本文件输入卡住了。
二、kettle步骤通信
kettle调优中有个重要的参数:记录集合里面的记录数。
该数量是指组件与组件之间通信的【缓存队列】的size大小,Kettle内部用List实现该缓存队列,每一条语句都会被封装成一个 RowSet对象,每个组件之间都会有个List<RowSet>队列,源step每次会往该队列写一条数据,目标step每次会从队列读取一条数据。
kettle里面转换是并行的,数据是一条一条流经每个组件,队列大小采用默认的10000条即可。
但是当使用到【阻塞数据直至步骤完成】、【阻塞数据】相关组件时,则需要根据业务数据量扩大该size的大小。
否则,数据会一直在某两个组件之间的缓存队列中存放,当数量达到一定大小时,就会卡主不动。
缓存队列的大小对作业没有影响,查看源码发现,缓存队列由inputRowSet 和 outputRowset组成,底部实现是ArrayList,初始化创建的时候,默认容量为10,并不会直接创建设定长度的 数组。并且使用ArrayList的特性:当要添加的数据量超过数组的容量时候,ArrayList会动态扩容,size扩大1.5倍
问题:考虑到后面数据量会比较大或数据积压,会将 Kettle程序数据处理流程优化, 或者采用代码实现数据的ETL