来自关于复制的kafka 文档:
在 Kafka 中添加复制的目的是为了更强的持久性和更高的可用性。我们希望保证任何成功发布的消息都不会丢失并且可以被消费,即使出现服务器故障。此类故障可能由机器错误、程序错误或更常见的软件升级引起。
从关于效率的kafka 文档:
代理维护的消息日志本身只是一个文件目录,每个文件都由一系列消息集填充,这些消息集以生产者和消费者使用的相同格式写入磁盘。保持这种通用格式可以优化最重要的操作:持久日志块的网络传输。
我没有看到有关如何为主题生成偏移量的任何详细信息。将由集群中的单个机器生成偏移量,在这种情况下,有一个主节点或 Kafka 具有分布式日志记录,依赖于某种时钟同步并在所有节点之间以一致的顺序生成消息。
任何指示或附加信息都会有所帮助。
偏移量不是为每条消息显式生成的,消息也不存储它们的偏移量。
一个topic由partition组成,消息被写入junks中的partition,称为segment(在文件系统上,一个topic会有一个文件夹,每个partition都有子文件夹——一个segment对应一个partitions文件夹中的一个文件) .
此外,每个分区维护一个索引并与段文件一起存储,该索引使用每个段的第一条消息的偏移量作为键并指向该段。对于段内的所有连续消息,消息的偏移量可以通过它在段内的逻辑位置(包括第一条消息的偏移量)来计算。
如果您启动一个新主题或实际上是一个新分区,则会生成第一个段,并将其起始偏移量 0 插入到索引中。消息被写入该段,直到它已满。一个新段被启动,它的起始偏移量被添加到索引中——新段的起始偏移量可以很容易地通过最新段的起始偏移量加上该段内的消息数来计算。
因此,对于每个分区,托管该分区的代理(即该分区的领导者)通过维护索引来跟踪该分区的偏移量。如果由于保留时间已过而删除段,则段文件将被删除并删除索引中的条目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句