一、earliest

创建一个topic名称为 test1 ,设定这个topic初始有三个分区

生成一个消费者组 g001 ,订阅 test1 ,参数使用 earliest

如果 g001 消费者组 在 test1的其中一个分区下没有提交 偏移量offset,在消费该分区数据的时候会 从头 全部读取

如果 g001 消费者组 在 test1 的其中一个分区下有提交 偏移量offset,在消费该分区数据的时候会从 偏移量offset处开始读取

二、latest

创建一个topic名称为 test2 ,设定这个topic初始有三个分区

生成一个消费者组 g002 ,订阅 test2 ,参数使用 latest

如果 g002 消费者组 在 test2 的其中一个分区下没有提交 偏移量offset,在消费该分区数据的时不会 从头 全部读取,而是读取 新产生的数据

如果 g002 消费者组 在 test2 的其中一个分区下有提交 偏移量offset,在消费该分区数据的时候会从 偏移量offset 处开始读取

三、测试

如果想要测试,可以设置参数 enable.auto.commit fales (当设置为fales时当前消费者组将不再自动提交偏移量offset,默认是true)


创建一个topic名称为 test3 ,设定这个topic初始有三个分区,假设有初始数据10条

生成一个新的消费者组 g003 ,订阅 test3 ,参数使用 earliest 设置参数 enable.auto.commit fales

消费者组 g003 不管重新启动多少次,依旧消费这10条数据,因为 g003 还没有提交过关于 test3 的 偏移量offset

当消费者组 g003 提交了一次关于 test3偏移量offset 之后(在这我们假设提交之后 偏移量offset 为11) , 有一个生产者test3 新提交了5条数据

这时,不管重启多少次 g003 ,也只会消费这新的5条数据


创建一个topic名称为 test4 ,设定这个topic初始有三个分区,假设有初始数据10条

生成一个新的消费者组 g004 ,订阅 test4 ,参数使用 latest 设置参数 enable.auto.commit fales

消费者组 g004 不管重新启动多少次,都不会消费到这10条数据,因为 g004 还没有提交过关于 test4 的 偏移量offset 所以 latest 会让消费者组读取新产生的数据

当消费者组 g004 提交了一次关于 test4偏移量offset 之后(在这我们假设提交之后 偏移量offset 为11) , 有一个生产者test4 新提交了5条数据

这时,不管重启多少次 g004 ,也都会一直消费这新的5条数据


四、结论

earliestlatest 在有 偏移量offset 时,效果是一样的,都会从 偏移量offset 处继续消费;当没有 偏移量offset 时, ealiest 从头消费latest 消费新产生的数据

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐