Kafka的三种语义

1、至少一次:at-least-once 表示的是关闭offset自动提交功能,消费端在消费数据的时候很可能在commitAync之前,已经保存在数据库,但是这个时候服务器宕机了,从而导致offset不能提交成功。这个时候再次启动消费者的时候,还是会再次写入数据库,也就是至少一次会重复消费,至少不会丢数据。

2、至多一次:at-most-once 表示有可能是0次或者1次,可以选择开启自动提交offset的功能,然后把自动提交offset的时间设置一下,有可能消费者在消费的时间段内就到了自动提交的时间,从而导致了offset已经提交了,但是数据库保存还没进行。下一次再消费的时候就会认为offset已经成功了,直接丢弃消息。就会造成丢数据。

3、仅一次:exactly-once 表示数据仅被消费一次,还是开启自动开启offset提交的功能,可以开启consumer.seek()方法,相当于自己处理分区和offset,可以在此基础上开启事务,保持原子性,只有数据库保存成功再提交offset,保证两者同时成功。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。