0

如何在kafka中进行完全复制?

我有两个服务器,一个领导者和一个追随者。

如何确保当leader拒绝(关闭)时,所有发送给follower的消息在开启后也出现在leader上。

我知道启动的一个选项:Kafka 有一个内置的bin/kafka-mirror-maker.sh同步程序。它应该始终在领导者上运行,然后发送给它的消息也会发送给跟随者。当领导者关闭时,该程序应该在跟随者上启动,并且据我所知,所有消息都会发送给他。在leader开启后,同步后(即消息开始只发给leader的那一刻),这个服务也应该在leader上启动,在follower上关闭,那么消息会一直在同步。

如果您同时在两台服务器上保留这些服务,则消息将无休止地重复。也就是说,由于同步,一条消息将不断地到达跟随者和领导者。

但我不确定这种方法是否正确,它需要额外的资源:用于跟踪所有这些并运行bin/kafka-mirror-maker.sh.

 我怎样才能做到正确而又不浪费资源?

4

2 回答 2

2

Kafka 本身就是一个分布式系统。根据文档

Kafka 在可配置数量的服务器上复制每个主题分区的日志(您可以逐个主题设置此复制因子)。这允许在集群中的服务器发生故障时自动故障转移到这些副本,以便在出现故障时消息仍然可用。

如果您想在 Kafka集群(例如完整的数据中心或服务于不同目的的集群)之间进行复制,那么这就是 MirrorMaker 之类的地方。

于 2020-04-24T10:32:25.400 回答
0

如何确保当leader拒绝(关闭)时,所有发送给follower的消息在开启后也出现在leader上

这是内置在协议中的,但假设您使用的每个主题都有replication-factor=2


听起来您在同一网络上只有两个代理,因此您不需要MirrorMaker,因为文档清楚地表明它位于两个不同的区域数据中心之间。

我想补充一点,如果您确实想这样做,请不要使用kafka-mirror-maker. 它不像你想象的那样容错和可扩展。

相反,使用MirrorMaker 2作为框架的一部分。

于 2020-04-24T14:24:31.260 回答