在我们的项目中,有Active Kafka服务器(PR)和Passive Kafka服务器(DR),两个Kafka代理都在我们的项目中配置了相同的组名,主题名和分区。从PR切换到DR时,已在DR上手动设置_consumer_offsets。
我在这里的问题是,Kafka使用者是否能够从上次读取的地方无缝使用消息?
答案 0 :(得分:0)
在两个群集之间复制邮件时,无法确保偏移量保持同步。
例如,如果某个主题在Active群集上存在了一段时间,则某些分区的日志开始偏移可能不为0(某些记录已被保留策略删除)。因此,在复制此主题时,两个群集之间的偏移量将不同。当消息丢失或重复时,也可能发生这种情况,因为在两个群集之间复制时,您不能完全具有一次语义。
因此,您不能仅复制__consumer_offsets
主题,这将无法正常工作。必须在两个集群之间明确“转换”消费者组的位置。虽然可以通过直接提交来“手动”重置它们,但不建议这样做,因为发现新职位并不明显。
相反,您应该使用支持“偏移量转换”的复制工具,以确保使用者可以从一个群集无缝切换到另一个群集。
例如,用于镜像群集的官方Kafka工具Mirror Maker 2支持通过RemoteClusterUtils
进行偏移平移。您可以在KIP中找到详细信息。
答案 1 :(得分:0)
仅靠两个群集具有相同的偏移量这一事实本身就是错误的。
偏移量-是相对特征。这不是消息的一部分。它实际上是文件内的位置。这些文件(Kafka日志文件)也会轮换并保留。不能保证这些日志文件在任何给定时间点都是相同的。卡夫卡并没有声称要解决这个问题。
此外,从CAP的角度来看很难解决。
除非您想要严格的物理复制。
这就是为什么Kafka多集群工具通常是关于逻辑复制的原因。我没有使用过Mirror Maker(MM
),但是我已经使用了Replicator(这是Confluent的更高级的商业工具),它具有一个称为的功能,就像{{1 }}一-偏移平移。
复制器执行following:
MM
主题可以了解消费者群体的进度。__consumer_timestamps
只要目标群组中没有任何使用者,
组连接到目标群集。注意:您确实需要向您的Kafka使用者中添加interceptor。