apache-kafka - 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:[O1:T3]、[O2:T2]、[O3:T3]、[O4:T1]、[O5:T3]
- DC-2:[O3:T3]、[O4:T2]、[O5:T3]、[O6:T1]、[O7:T3]
当 DC-1 中的消费者提交...
- 偏移量 O2,DC-2 偏移量是否转换为 O4?
- 偏移量 O5,DC-2 偏移量是否转换为 O3、O5 或 O7?
我的猜测是转换后的偏移量是 O4 和 O3,但只是想确认一下。
解决方案
推荐阅读
- javascript - 检测选项卡何时变慢
- python - 多对一关系的 Python 对象识别
- api - 如何使用 powershell 关闭 Lametric 通知
- css - Flex - 内容与底部对齐
- ios - RxSwift flatMapLatest 不释放之前的 observables
- wordpress - 在wordpress中访问的链接重置
- android - 无法使用 ConstraintSet 进行动画处理:plop.xml plop_alt.xml
- .net - 套接字错误 11003 从网络驱动器执行 .NET 远程调用
- mysql - 如何从具有条件的红移中获取行
- google-bigquery - BigQuery:项目在数据区域中没有预留