【问题标题】:How is Apache Kafka offset generated?Apache Kafka 偏移量是如何生成的?
【发布时间】:2017-03-12 17:53:54
【问题描述】:

经过 How is the kafka offset value computed?

来自kafka documentation 的复制:

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

来自kafka documentation 效率:

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

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

任何提示或附加信息都会有所帮助。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    不会为每条消息显式生成偏移量,消息也不会存储它们的偏移量。

    主题由分区组成,消息以垃圾形式写入分区,称为 segments(在文件系统上,将有一个主题文件夹,每个分区都有子文件夹 -段对应于分区文件夹中的文件)。

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

    如果您开始一个新主题或实际上是一个新分区,则会生成第一个段,并将其起始偏移量零插入索引中。消息被写入该段,直到它已满。一个新的段被启动,它的开始偏移量被添加到索引中——新段的开始偏移量可以很容易地通过最新段的开始偏移量加上这个段中的消息数来计算。

    因此,对于每个分区,托管此分区的代理(即此分区的领导者)通过维护索引来跟踪此分区的偏移量。如果段因保留时间已过而被删除,则段文件会被删除,索引中的条目也会被删除。

    【讨论】:

    • 当我根本没有指定任何分区时,您能否用一个主题和默认分区示例详细说明这一点。我是新手,因此很难想象这一点。
    • 我不确定我是否理解你的问题。这有帮助吗:confluent.io/blog/…
    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 2016-03-05
    • 2018-01-22
    • 2014-08-08
    • 2021-02-22
    相关资源
    最近更新 更多