惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
SecWiki News
SecWiki News
博客园_首页
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
P
Palo Alto Networks Blog
V
Vulnerabilities – Threatpost
Project Zero
Project Zero
WordPress大学
WordPress大学
NISL@THU
NISL@THU
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Privacy & Cybersecurity Law Blog
Jina AI
Jina AI
AWS News Blog
AWS News Blog
Scott Helme
Scott Helme
Martin Fowler
Martin Fowler
C
Cybersecurity and Infrastructure Security Agency CISA
Forbes - Security
Forbes - Security
H
Heimdal Security Blog
小众软件
小众软件
I
Intezer
A
Arctic Wolf
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
O
OpenAI News
S
Security Affairs
阮一峰的网络日志
阮一峰的网络日志
Latest news
Latest news
G
GRAHAM CLULEY
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
N
News and Events Feed by Topic
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V2EX - 技术
V2EX - 技术
Stack Overflow Blog
Stack Overflow Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
L
LINUX DO - 最新话题
博客园 - Franky
P
Proofpoint News Feed
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
P
Proofpoint News Feed
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
T
The Exploit Database - CXSecurity.com
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
F
Full Disclosure
Security Latest
Security Latest

博客园 - 慕容尘轩

DataX从入门到精通 第4课 ETL之DataX datax-web单表数据全量+增量同步 DataX从入门到精通 第3课 ETL之DataX datax-web单表数据同步 DataX从入门到精通 第2课 ETL之DataX 安装datax-web DataX从入门到精通 第1课 ETL之DataX 安装DataX kettle插件-excel插件,kettle读取excel动态表头,kettle根据列名读取excel kettle从入门到精通 第119课 ETL之kettle kettle读取excel动态表头,kettle根据列名读取excel kettle从入门到精通 第118课 ETL之kettle,kettle job串行、job并行、 job依赖使用教程 kettle从入门到精通 第117课 ETL之kettle,kettle调用his接口,入参和响应数据均为xml结构 kettle调度系统- XKG集成WebSpoon9.4,kettle脚本在线设计&测试&部署一站式解决方案,持续赋能企业 kettle从入门到精通 第115课 ETL之webspoon 全局异常/错误捕获-续 kettle从入门到精通 第114课 ETL之webspoon 全局异常/错误捕获 kettle从入门到精通 第113课 ETL之webspoon 多行转一行或者多行数据合并为一行 kettle调度系统- 脚本执行错误信息邮件预警,及时发现&解决问题,捍卫生产环境 kettle从入门到精通 第112课 ETL之kettle 数据库资源库,受不了了,逼我出大招 kettle调度系统- kettle数据库资源库,团队协作问题轻松拿捏 kettle调度系统- kettle文件资源库,轻松解决团队协作和脚本版本管理问题 kettle调度系统-1分钟提供接口供外部系统调用,配置简单,快速高效 kettle从入门到精通 第111课 ETL之kettle webspoon7的docker部署详细教程 kettle调度系统-carte集群服务调度,carte集群+算子级集群双集群,涡轮增压,性能拉满,赋能大中型企业 kettle调度系统-carte单体服务调度,支持多kettle版本部署,任务触发毫秒级响应0延迟 kettle从入门到精通 第110课 ETL之kettle webspoon的两种部署方式docker+tomcat使用教程 kettle调度系统-kettle spoon方式调度,强大兼容性,支持各种版本kettle kettle调度系统-kettle嵌入集成方式调度,稳如磐石,一分钟完成任务调度配置 kettle从入门到精通 第109课 ETL之kettle, kettle docker 镜像制作&容器部署
kettle从入门到精通 第116课 ETL之kettle,线上排雷,踩坑复盘
慕容尘轩 · 2026-01-28 · via 博客园 - 慕容尘轩

场景:周五的时候一个小伙伴加我v请教kettle分页问题,当时想的这个问题很简单,直接丢个demo不就完事了嘛,结果搞了3个晚上才搞定,今天来复盘下踩过的坑。

67f1de4d-5acf-4722-b33c-b17b44378b7c

 1、先解决报错问题

首先我处理问题的方式一般是腾讯会议连麦线上排雷。对方的第一个问题是脚本中定义了两个字段,一个是page 默认值是0,另外一个是size默认值是1000。

由于这个job中有多个字转换,通过javascript脚本步骤,复制记录到结果,从结果复制记录等步骤传递参数。多个步骤中page和size的数据类型不一致,导致脚本报错。

解决方案:将page和size的类型设置为统一,这里统一设置为了String ,解决了脚本报错的问题。

2、api接口惹的祸

对方的脚步文件中使用rest组件请求接口获取数据,然后使用json input进行解析。接口的入参是{"page":"0","size":"1000"}

当你看到这个参数之后,是不是第一眼就认为page就是页码,比如0,1,2,3......,但是经过调试发现一直有重复数据,而且对方的同事很坚定的说接口没问题而且一直在用。

直到我看到他和同事的聊天记录后发现了问题所在,对方发给他的参数是:{"page":"0","size":"1000"},{"page":"1000","size":"1000"},{"page":"2000","size":"1000"}

估计细心的人已经发现这里的page参数不是页面,是偏移量offset。类似于mysql中的limit m,n 也就是说从m条记录开始取数据,取n条。

知道了问题所在,马上调整脚本。以为问题终于解决了,洗洗睡觉。然而。。。

3、问题依然存在

脚本调整之后,任务全量跑了一次,结果业务反馈数据缺失且有重复数据问题。我的第一反应就是接口问题,但是对方坚持成接口没问题。没办法,开始调试分析脚本。

经过各种调试,打日志,Alert跟踪,最终一个逗号引起了我的重视,也就是这个逗号引起了接口取数异常。在调试的过程中发现使用javascript代码构造的参数为{"page":"1,000","size":"1,000"}而不是{"page":"1000","size":"1000"},凡事数字大于1000之后都有加逗号进行格式化。后来由于时间比较紧急,简单粗暴方案解决使用replace方法将逗号替换为空字符串解决此问题。

神奇的是即使带着逗号请求接口依然可以获取到数据,真是醉了。。。,这接口容错能力也太强了吧。。。

去掉了逗号,接口数据终于可以正常获取了。

4、持续寻找真凶

虽然用replace方法解决了逗号的问题,但是总感觉没找到真正的问题。由于对方使用的是kettle 7.1版本,我本地也搞了7.1版本来测试。使用javascript步骤声明变量,又一切正常不含有逗号。

376db608-6bb3-4f96-a047-d5f7bf102209

后来想起来了一个函数,也就是这个函数引入了逗号。这个函数就是javascript步骤中的num2str

a2c86398-b5d9-4a6f-bb62-be2c8cf70bf2

 然后查了下kettle的说明文档,将函数num2str多传递一个参数0即可。

6c0e28de-a00b-47db-9c21-a7ab3fc39b03

 至此问题彻底解决。

19a16590-444a-4e76-b15c-1cb38543079e

image