欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

配置Kafka的参数auto.offset.reset时earliest和latest的区别

时间:2023-06-25
一、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条数据,因为 g003 还没有提交过关于 test3 的 偏移量offset 所以 latest 会让消费者组读取新产生的数据

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

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


四、结论

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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。