kafka auto.offset.reset值不起作用

Posted 菠菜很好吃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka auto.offset.reset值不起作用相关的知识,希望对你有一定的参考价值。

文章目录

一、auto.offset.reset值含义解释

<earliest>
当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
<latest>
当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
<none>
topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常

二、实际应用不起作用


问题原因

那就是对于同一个groupid的消费者,
如果这个topic某个分区有已经提交的offset,那么无论是把auto.offset.reset=earliest还是latest,都将失效,
消费者会从已经提交的offset开始消费.

那我没究竟如何才能消费最早的数据?肯定是可以的,看下面测试验证!!!

测试验证1(网上说,关闭自动提交)——失败

把kafka的enable.offset.commit设置为false,让kafka的自动提交功能关闭,这时候对于某个topic就没有已经提交的offset了

测试验证2(满足两个条件)——成功

欢迎加入扣扣老程序员圈:783092701

  1. 使用一个全新的"group.id"(就是之前没有被任何消费者使用过);
  2. 指定"auto.offset.reset"参数的值为earliest;

注意

测试验证2,换了新的group.id是可以从最早数据消费;但是重启服务后,又只能从最新的开始消费!

三、kafka能否创建很多消费者组

  • 需求:需要每次从最早消费,那就需要每次创建新的消费者组
  • 疑惑点我们能否手动删除旧的消费者组?
    无需与新使用者一起删除。以下是尝试删除时脚本输出的内容:
    请注意,无需删除新使用者的组元数据,因为当最后一个成员离开时,它会自动删除
    这是简短的答案。更多细节:通过“元数据”,有两个意思。首先,只需存储作为组成员身份协调器一部分的有关消费者和消费者组的信息。如果组中的所有消费者都不在,则会自动删除。
    其次,使用者组已将提交的偏移量存储在kafka主题中(使用新使用者时)。以前这些都是用zookeeper存储的)。当消费者群体消失时,该主题不会立即删除。如果使用者组再次出现,它将在本主题中自动找到以前的偏移量。它可以选择使用它们或忽略它们。如果使用者组不再出现,这些存储的偏移量最终会被自动垃圾收集。
    因此,简而言之,在使用新消费者时不需要删除任何内容。

以上是关于kafka auto.offset.reset值不起作用的主要内容,如果未能解决你的问题,请参考以下文章

kafka的auto.offset.reset详解与测试

kafka auto.offset.reset / latest / earliest 详解

kafka之consumer参数auto.offset.reset 0.10+

kafka auto.offset.reset latest earliest 详解

kafkakafka 消费速度 于 日志清理速度 (kafka数据被清理了)会发生什么 auto.offset.reset 参数

关于Kafka的其他一些内容,堆积情况,retention,auto.offset.reset