美文网首页中间件
Kafka auto.offset.reset值详解

Kafka auto.offset.reset值详解

作者: 香山上的麻雀 | 来源:发表于2019-06-26 17:33 被阅读0次

昨天在写一个java消费kafka数据的实例,明明设置auto.offset.reset为earliest,但还是不从头开始消费,官网给出的含义太抽象了。
earliest: automatically reset the offset to the earliest offset,自动将偏移量置为最早的。难道不是topic中各分区的开始?结果还真不是,具体含义如下:
auto.offset.reset值含义解释

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

以下为测试详细:

1.同分组下测试

1.1测试一

1.1.1测试环境

Topic为lsztopic7,并生产30条信息。lsztopic7详情:



创建组为“testtopi7”的consumer,将enable.auto.commit设置为false,不提交offset。依次更改auto.offset.reset的值。此时查看offset情况为:


1.1.2测试结果

earliest :
客户端读取30条信息,且各分区的offset从0开始消费。
latest :
客户端读取0条信息。
none :
抛出NoOffsetForPartitionException异常。


1.1.3测试结论

新建一个同组名的消费者时,auto.offset.reset值含义:
earliest 每个分区是从头开始消费的。
none 没有为消费者组找到先前的offset值时,抛出异常

1.2测试二

1.2.1测试环境

测试场景一下latest时未接受到数据,保证该消费者在启动状态,使用生产者继续生产10条数据,总数据为40条。


1.2.2测试结果

latest
客户端取到了后生产的10条数据

1.2.3测试结论

当创建一个新分组的消费者时,auto.offset.reset值为latest时,表示消费新的数据(从consumer创建开始,后生产的数据),之前产生的数据不消费。

1.3测试三

1.3.1测试环境

在测试环境二,总数为40条,无消费情况下,消费一批数据。运行消费者消费程序后,取到5条数据。
即,总数为40条,已消费5条,剩余35条。


1.3.2测试结果

earliest
消费35条数据,即将剩余的全部数据消费完。
latest
消费9条数据,都是分区3的值。

offset:0 partition:3 
offset:1 partition:3 
offset:2 partition:3 
offset:3 partition:3 
offset:4 partition:3 
offset:5 partition:3 
offset:6 partition:3 
offset:7 partition:3 
offset:8 partition:3

none
抛出NoOffsetForPartitionException异常。


1.3.3测试结论

earliest 当分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费。
latest 当分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据。
none 当该topic下所有分区中存在未提交的offset时,抛出异常。

1.4测试四

1.4.1测试环境

在测试三的基础上,将数据消费完,再生产10条数据,确保每个分区上都有已提交的offset。
此时,总数为50,已消费40,剩余10条


1.4.2测试结果

none
消费10条信息,且各分区都是从offset开始消费

offset:9 partition:3 
offset:10 partition:3 
offset:11 partition:3 
offset:15 partition:0 
offset:16 partition:0 
offset:17 partition:0 
offset:18 partition:0 
offset:19 partition:0 
offset:20 partition:0 
offset:5 partition:2

1.4.3测试结论

值为none时,topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常。

2.不同分组下测试

2.1测试五

2.1.1测试环境

在测试四环境的基础上:总数为50,已消费40,剩余10条,创建不同组的消费者,组名为testother7


2.1.2 测试结果

earliest
消费50条数据,即将全部数据消费完。
latest
消费0条数据。
none
抛出异常


2.1.3测试结论

组与组间的消费者是没有关系的。
topic中已有分组消费数据,新建其他分组ID的消费者时,之前分组提交的offset对新建的分组消费不起作用。

相关文章

  • Kafka auto.offset.reset值详解

    昨天在写一个java消费kafka数据的实例,明明设置auto.offset.reset为earliest,但还是...

  • Kafka auto.offset.reset值详解

    auto.offset.reset值含义解释 earliest 当各分区下有已提交的offset时,从提交的off...

  • kafka 基于Partition 和group 消费,kafk

    kafka消费模式 基于partition 指定offset 基于group auto.offset.reset ...

  • flume经验

    一、source 1. kafka source 常用参数: auto.offset.reset,只有当使用新的g...

  • Kafka+spark streaming

    1. spark接入kafka流时,offset的参数设置 如果你将auto.offset.reset设为sma...

  • Kafka配置详解

    kafka基本概念及配置详解 kafka 基本概念 Topic 主题,声明一个主题,producer指定该主题发布...

  • 每日一读 12.04

    Kafka新版消费组(consumer group)详解 http://www.aboutyun.com/foru...

  • kafka使用笔记

    Kafka新老版本命令行参数对比详解 新老版本Kafka启动方式(两者一致): 新版本Kafka命令行参数(kaf...

  • Kafka详解

    应大部分的小伙伴的要求,今天这篇咱们用大白话带你认识 Kafka。 Kafka 基础 消息系统的作用 大部分小伙伴...

  • Kafka详解

    Kafka Kafka 概述 kafka是什么? 在流式计算中,kafka一般用来储存缓存数据,Storm通过消费...

网友评论

    本文标题:Kafka auto.offset.reset值详解

    本文链接:https://www.haomeiwen.com/subject/kethcctx.html