kafka之auto-offset-reset

官方文档解释

auto.offset.reset: What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted):
earliest: automatically reset the offset to the earliest offset
latest: automatically reset the offset to the latest offset
none: throw exception to the consumer if no previous offset is found for the consumer's group
anything else: throw exception to the consumer.

官方文档说得很清楚了:kafka中没有offset时,不论是什么原因,offset没了,这是auto.offset.reset配置就会起作用,

  • earliest:从最早的offset开始消费,就是partition的起始位置开始消费
  • latest:从最近的offset开始消费,就是新加入partition的消息才会被消费
  • none:报错
    测试
    最容易测试的方式就是在partition中预存放一些消息,然后新建一个consum group来消费这个partition。

测试步骤:创建两个不同组的消费者,分别设置为earliest和latest

预先生产10条消息
启动两个消费者,观察消息获取
在不关闭消费者的情况下,继续生产10条消息
观察消息获取
第一步写入消息

@Autowired
private KafkaTemplate kafkaTemplate;

@Test
void sendMsg() {
    for (int i = 0; i < 10; i++) {
        kafkaTemplate.send("test", "message" + i);
    }
}

第二步创建、启动消费者
创建两个消费者consumer1(earliest)、consumer2(lastest),分别启动后观察到consumer1消费到10条消息,consumer2消费到0条消息

consumer1: partitions assigned: [test-0]
message0
message1
message2
message3
message4
message5
message6
message7
message8
message9
consumer2: partitions assigned: [test-0]

第三步继续生产消息
可以观察到两个消费者都消费了新的10条消息

message10
message11
message12
message13
message14
message15
message16
message17
message18
message19

第四步消费者关闭,再生产10条消息,启动消费者
此时在kafka服务器已经记录了消费者的offset,重启后两个消费者都从记录中的offset开始消费

message20
message21
message22
message23
message24
message25
message26
message27
message28
message29

总结
如果kafka服务器记录有消费者消费到的offset,那么消费者会从该offset开始消费
如果由于某些offset记录丢失了,此时auto-offset-reset就起了作用,earlist从头开始消费,latest从最新生产的消息开始消费

作者:陆阳226
链接:https://www.jianshu.com/p/2e0e682f77dd

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官方文档解释 auto.offset.reset: What to do when there is no ini...
    陆阳226阅读 10,987评论 0 1
  • 消息中间件的背景分析 场景分析 前面跟着我看过 zk 的源码,学过并发编程的同学应该知道,我们可以使用阻塞队列+线...
    悠娜的奶爸阅读 319评论 0 2
  • 什么是Kafka Kafka是一款分布式消息发布和订阅系统,它的特点是高性能、高吞吐量。 最早设计的目的是作为Li...
    WEIJAVA阅读 8,594评论 4 76
  • 什么是Kafka[#---kafka] Kafka的应用场景[#kafka-----] Kafka的架构[#kaf...
    PENG先森_晓宇阅读 4,936评论 4 91
  • 应用程序使用 KafkaConsumer向 Kafka 订阅 Topic 接收消息,首先理解 Kafka 中消费者...
    Alex90阅读 45,123评论 2 15