创建一个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 消费新产生的数据