每条消息在分区中的位置信息由一个叫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的数据来表征第二步的主要内容,如果未能解决你的问题,请参考以下文章