每条消息在分区中的位置信息由一个叫offset的数据来表征第二步

Posted yangwenbing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每条消息在分区中的位置信息由一个叫offset的数据来表征第二步相关的知识,希望对你有一定的参考价值。

概念剖析

kafka的两种位移

关于位移(Offset),其实在kafka的世界里有两种位移:

  • 分区位移:生产者向分区写入消息,每条消息在分区中的位置信息由一个叫offset的数据来表征。假设一个生产者向一个空分区写入了 10 条消息,那么这 10 条消息的位移依次是 0、1、…、9;

  • 消费位移:消费者需要记录消费进度,即消费到了哪个分区的哪个位置上,这是消费者位移(Consumer Offset)。

注意,这和上面所说的消息在分区上的位移完全不是一个概念。上面的“位移”表征的是分区内的消息位置,它是不变的,即一旦消息被成功写入到一个分区上,它的位移值就是固定的了。而消费者位移则不同,它可能是随时变化的,毕竟它是消费者消费进度的指示器。

消费位移

消费位移,记录的是 Consumer 要消费的下一条消息的位移,切记,是下一条消息的位移! 而不是目前最新消费消息的位移

假设一个分区中有 10 条消息,位移分别是 0 到 9。某个 Consumer 应用已消费了 5 条消息,这就说明该 Consumer 消费了位移为 0 到 4 的 5 条消息,此时 Consumer 的位移是 5,指向了下一条消息的位移。

至于为什么要有消费位移,很好理解,当 Consumer 发生故障重启之后,就能够从 Kafka 中读取之前提交的位移值,然后从相应的位移处继续消费,从而避免整个消费过程重来一遍。就好像书签一样,需要书签你才可以快速找到你上次读书的位置。

那么了解了位移是什么以及它的重要性,我们自然而然会有一个疑问,kafka是怎么记录、怎么保存、怎么管理位移的呢?

位移的提交

Consumer 需要上报自己的位移数据,这个汇报过程被称为位移提交。因为 Consumer 能够同时消费多个分区的数据,所以位移的提交实际上是在分区粒度上进行的,即Consumer 需要为分配给它的每个分区提交各自的位移数据。

鉴于位移提交甚至是位移管理对 Consumer 端的巨大影响,KafkaConsumer API提供了多种提交位移的方法,每一种都有各自的用途,这些都是本文将要谈到的方案。

以上是关于每条消息在分区中的位置信息由一个叫offset的数据来表征第二步的主要内容,如果未能解决你的问题,请参考以下文章

涨姿势了解一下Kafka消费位移可好?

kafka 提交offset

Kafka的消息格式及offset是如何设置的

Kafka 消费者是否可以消费指定分区消息?

Kafka 消费者是否可以消费指定分区消息?

KafKa - 分区副本消息同步策略 及 消息丢失问题