You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Apache Camel实现SFTP与本地CSV仅追加变更数据同步?

Apache Camel SFTP增量同步CSV文件(追加而非覆盖)

要实现仅追加源CSV文件的增量数据到本地,需要从写入端的追加配置和读取端的增量读取两方面调整:

1. 本地文件写入开启追加模式

默认file组件会覆盖已存在的文件,只需在to端点添加fileExist=Append参数,即可让目标文件存在时自动追加内容:

.to("file:location_dir?fileExist=Append")

2. SFTP端实现增量读取(核心)

如果仅配置追加写入,SFTP默认仍会每次读取整个文件,导致本地文件重复追加全量内容。需开启SFTP的tail模式,让Camel像tail -f命令一样监控文件新增内容,仅传输增量部分:

完整路由示例

public class MyRouteBuilder extends RouteBuilder {
    public void configure() {
        from("sftp://user@address/location?password=password&tail=true&delay=3000&tailTrackingFile=/path/to/your/track-file.track")
            .to("file:location_dir?fileExist=Append");
    }
}

参数说明:

  • tail=true:开启tail模式,仅读取文件新增的内容
  • delay=3000:设置轮询间隔(单位毫秒,这里是3秒),可根据业务需求调整
  • tailTrackingFile=/path/to/your/track-file.track:保存读取位置的跟踪文件,重启Camel后可从上次中断的位置继续读取,避免从头开始

额外调整(可选)

如果第一次运行时不想读取文件历史内容,仅监控后续新增数据,添加tailInitialDelay=-1参数:

from("sftp://user@address/location?password=password&tail=true&delay=3000&tailTrackingFile=/path/to/your/track-file.track&tailInitialDelay=-1")

特殊场景处理

如果源CSV文件不是持续追加,而是定期编辑修改(比如手动新增行后保存),tail模式可能不适用。这种情况下可以结合idempotentConsumer和文件修改时间过滤,或自定义处理器对比本地与远程文件的内容差异,但实现相对复杂,优先推荐tail模式用于持续追加的文件场景。

内容的提问来源于stack exchange,提问作者Ulil Kamal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:32:36