手动设置Kafka使用方偏移量

时间:2020-03-30 17:01:43

标签: apache-kafka

在我们的项目中,有Active Kafka服务器(PR)和Passive Kafka服务器(DR),两个Kafka代理都在我们的项目中配置了相同的组名,主题名和分区。从PR切换到DR时,已在DR上手动设置_consumer_offsets。

我在这里的问题是,Kafka使用者是否能够从上次读取的地方无缝使用消息?

2 个答案:

答案 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