iLogtail 社区版提供两种 checkpoint 机制来保障采集的可靠性:
第一种(默认机制):在配置更新、进程退出或定时器触发时,将包含 offset 的 checkpoint 写入本地文件。对于 flusher_sls,进程正常结束时会将内存队列中的数据写入本地磁盘文件。对于其他 flusher,由各 flusher 实现的 stop 函数负责数据持久化,stop 函数执行完毕后进程才会退出。这种机制的局限是:进程异常退出时来不及保存 offset,导致内存队列中的数据位置信息丢失,重启后会从上次已保存的点位开始,产生重复消费。
第二种(ExactlyOnce 语义):结合后端 SLS 的去重机制实现。根据 sender 的反馈设置 commit 状态位,将文件读偏移 offset 和读大小写入本地存储。发送失败的数据其 commit 状态为未提交,下次事件触发时进行采集回放。这种方式在客户端和服务端配合下可实现精确一次语义,但目前仅对 SLS 输出可用。