共计 1321 个字符,预计需要花费 4 分钟才能阅读完成。
这篇文章给大家介绍 Kafka 核心中的偏移量机制 Offset 是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
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 是他自己维护的,他可以选择分区最开始,最新,也可以记住他消费到哪了。
消费者组是为了不同组的消费者可以同时消费一个分区的消息。
关于 Kafka 核心中的偏移量机制 Offset 是怎么样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。