是通过checkpoint保存kafaka的offset,如果下游出现问题,他就会从checkpoint中拿到kafka的offset从新开始消费,这是保证 AT_LEAST_ONCE 语义。
在写入下游的kafka的时候,这些重试的数据会写入到下游的kafka中,但是他们是read_uncommited的,然后下游的kafka消费的时候一定要把isolation.level 设置成为read_committed,这样,那些重试的写进kafka的数据就会被过滤掉,只会留下最后一次处理成功的一条数据是read_committed,这就实现了EXACTLY_ONCE 语义
这里注意,kafka的消费者中,isolation.level 配置默认是read_uncommited的
image.png