如何生成Apache Kafka偏移量?

时间:2017-03-12 17:53:55

标签: apache-kafka

走了 How is the kafka offset value computed?

来自kafka documentation复制:

  

在Kafka中添加复制的目的是提高耐用性和可用性。我们希望保证即使存在服务器故障,任何成功发布的消息也不会丢失并且可以被消费。此类故障可能由机器错误,程序错误或更常见的软件升级引起。

来自kafka documentation效率:

  

代理维护的消息日志本身只是一个文件目录,每个文件都由一系列消息集填充,这些消息集已经以生产者和消费者使用的相同格式写入磁盘。维护这种通用格式可以优化最重要的操作:持久日志块的网络传输。

我没有看到有关如何为主题生成偏移的任何细节。将由群集中的单个机器生成偏移,在这种情况下,有一个主机或Kafka具有依赖于某种时钟同步的分布式日志记录,并在所有节点之间以一致的顺序生成消息。

任何指针或其他信息都会有所帮助。

1 个答案:

答案 0 :(得分:1)

不会为每条消息显式生成偏移量,并且消息也不会存储其偏移量。

一个主题由分区组成,消息被写入junks中的分区,称为 segments (在文件系统上,将有一个主题文件夹,每个分区都有子文件夹 - a segment对应于分区文件夹中的文件。)

此外,每个分区维护一个索引并与段文件一起存储,该段文件使用每个段的第一个消息的偏移量作为键并指向该段。对于段内的所有连续消息,消息的偏移量可以通过它在段内的逻辑位置来计算(包括第一个消息的偏移量)。

如果启动新主题或实际是新分区,则会生成第一个段,并将其起始偏移量0插入索引中。消息被写入段,直到它满了。启动一个新段并将它的起始偏移量添加到索引中 - 新段的起始偏移量可以通过最新段的起始偏移量加上此段内的消息数来轻松计算段。

因此,对于每个分区,承载此分区的代理(即此分区的分支)通过维护索引来跟踪此分区的偏移量。如果由于保留时间过去而删除了段,则会删除段文件并删除索引中的条目。