首页 > 解决方案 > Confluent Replicator 的偏移转换如何处理时钟偏差?

问题描述

我一直在阅读Confluent Replicator 的文档以评估其主动-主动多数据中心复制支持,虽然文档清楚地说明了它将消费者偏移量从一个 DC 转换到另一个 DC 的机制,但我仍然不清楚的是该机制如何处理时钟偏差。

通过阅读数据恢复白皮书可以看出,用于翻译的消息时间戳实际上CreateTime是来自生产者的时间戳。然而,所有关于如何执行偏移转换的示例似乎都暗示时间戳是单调递增的,例如这个复制器博客文章

使用时间戳的消费者偏移量转换

为什么这是一个问题?因为很难(阅读:几乎不可能)保证在商用硬件上运行的分布式系统中的时间戳单调增加,即使使用专门的硬件(例如 AWS Time Sync Service),您能做的最好的事情就是尽量减少偏差(如果您不这样做)想要使用类似于 Google Spanner 的 TrueTime 的全球时间服务。

因此,让我们考虑最简单的场景,其中 DC-1 和 DC-2 已经使用单独的主题设置了主动-主动复制,例如 DC-1 中的主题 dc1-foo 复制到 DC2 中的 dc1-foo 和 dc2-foo 从DC2 被复制到 DC-1 中的 d2-foo。我们还假设数据中心从一开始就正常运行,但是 dc-1-foo 的复制经历了一个小问题,导致一些记录在 DC-2 中重复,使得 DC-2 中的偏移量大于DC-1 中的偏移量。

给定 DC-1 中当前提交的偏移量为 O1,DC-2 为 O3,并且给定 dc1-foo 的内容(偏移量:TS 格式)为:

当 DC-1 中的消费者提交...

  1. 偏移量 O2,DC-2 偏移量是否转换为 O4?
  2. 偏移量 O5,DC-2 偏移量是否转换为 O3、O5 或 O7?

我的猜测是转换后的偏移量是 O4 和 O3,但只是想确认一下。

标签: apache-kafkaconfluent-platformapache-kafka-mirrormaker

解决方案


推荐阅读