专栏首页实时流式计算Kafka到底有几个Offset?——Kafka核心之偏移量机制

Kafka到底有几个Offset?——Kafka核心之偏移量机制

Kafka是由LinkIn开源的实时数据处理框架,目前已经更新到2.3版本。不同于一般的消息中间件,Kafka通过数据持久化和磁盘读写获得了极高的吞吐量,并可以不依赖Storm,SparkStreaming的流处理平台,自己进行实时的流处理。

Kakfa的Offset机制是其最核心机制之一,由于API对于部分功能的实现,我们有时并没有手动去设置Offset,那么Kafka到底有几个Offset呢?

一、生产者Offset

首先,我们先来看生产者的offset,我们知道Kafka是通过生产者将消息发送给某一个topic,消费者再消费这个topic的消息,当然可能有多个生产者,多个消费者,还可能有消费者组的概念,这个稍后在讨论。

当生产者将消息发送给某一个topic时,要看有多少个分区,因为kafka是通过分区机制实现分布式的。

图 生产者offset

通过此图可以清晰的看到生产者的offset原理,不管是多少个生产者,还是我们规定了他们会写入哪一个分区,但只要他们写入的时候,一定是每一个分区都有一个offset,这个offset就是生产者的offset,同时也是这个分区的最新最大的offset。

有些时候我们在开发生产者代码时并没有指定某一个分区的offset,可能是我们使用的单分区,或者默认均匀的写入多个分区,这个工作kafka帮我们完成了。

二、消费者Offset

再来看消费者端offset,要稍微复杂一些。

图 消费者offset

这是某一个分区的offset情况,我们已经知道生产者写入的offset是最新最大的值也就是12,而当Consumer A进行消费时,他从0开始消费,一直消费到了9,他的offset就记录在了9,Consumer B就纪录在了11。等下一次他们再来消费时,他们可以选择接着上一次的位置消费,当然也可以选择从头消费,或者跳到最近的记录并从“现在”开始消费。

这样即使有多个分区,消费者也能灵活使用。

图 消费者组

消费者组的概念其实并不影响对offset的理解,上面的情况Consumer A,Consumer B如果是同组就不能同时消费一个分区的消息,不同组的消费者可以同时消费一个分区的消息。

还有一种offset的说法,就是consumer消费未提交时,本地是有另外一个offset的,这个offset不一定与集群中记录的offset一致。

所以,kafka每一个topic分区和生产者,消费者不同,是有多个offset的。

总结如下:

offset是指某一个分区的偏移量。

topic partition offset 这三个唯一确定一条消息。

生产者的offset其实就是最新的offset。

消费者的offset是他自己维护的,他可以选择分区最开始,最新,也可以记住他消费到哪了。

消费者组是为了不同组的消费者可以同时消费一个分区的消息。

本文分享自微信公众号 - 实时流式计算(gh_69ef1361df3b),作者:独孤风

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kafka单线程Consumer及参数详解

    1、只需要配置kafka的server groupid autocommit 序列化 autooffsetreset(其中 bootstrap.se...

    用户6070864
  • 统一批处理流处理——Flink批流一体实现原理

    实现批处理的技术许许多多,从各种关系型数据库的sql处理,到大数据领域的MapReduce,Hive,Spark等等。这些都是处理有限数据流的经典方式。而Fli...

    用户6070864
  • 超越Storm,SparkStreaming——Flink如何实现有状态的计算

    流式计算分为无状态和有状态两种情况。无状态计算观察每个独立的事件,Storm就是无状态的计算框架,每一条消息来了以后和前后都没有关系,一条是一条。比如我们接收电...

    用户6070864
  • Spark Streamming+Kafka提交offset实现有且仅有一次

    董可伦
  • Kafka+Spark Streaming管理offset的几种方法

    场景描述:Kafka配合Spark Streaming是大数据领域常见的黄金搭档之一,主要是用于数据实时入库或分析。为了应对可能出现的引起Streaming程序...

    暴走大数据
  • Kafka+Spark Streaming管理offset的几种方法

    场景描述:Kafka配合Spark Streaming是大数据领域常见的黄金搭档之一,主要是用于数据实时入库或分析。为了应对可能出现的引起Streaming程序...

    王知无
  • Kafka到底有几个Offset?——Kafka核心之偏移量机制

    ​ Kakfa的Offset机制是其最核心机制之一,由于API对于部分功能的实现,我们有时并没有手动去设置Offset,那么Kafka到底有几个Offset呢?

    实时计算
  • thinkPHP5模版页面volist循环offset不能使用变量

    有这样一个应用场景:当volist循环需要排除前面几个数据的时候,我们通常使用offset来操作。而假设前面要排除的数据是根据当前页面占位符来确定的,而需要排除...

    世纪访客
  • Kafka的消费积压监控-Burrow

    扫帚的影子
  • LintCode-8.旋转字符串

    乍一看的思路是建立新的数组往里面填,空间复杂度O(n),时间复杂度O(1)。看了一下“挑战“是空间复杂度O(1),那么就是循环咯(没百度,可能有更6的办法)。

    悠扬前奏

扫码关注云+社区

领取腾讯云代金券