如何在卡夫卡的两个不同的集群消费?

时间:2017-01-04 06:10:40

标签: apache-kafka kafka-consumer-api

我有两个kafka集群说A和B,B是A的副本。我想只在A关闭时消耗来自集群B的消息而反之亦然。然而,消耗来自两个群集的消息将导致重复的消息。那么有什么方法可以配置我的kafka使用者只接收来自一个集群的消息。

谢谢 -

1 个答案:

答案 0 :(得分:2)

  

有没有什么方法可以配置我的kafka使用者只接收来自一个群集的消息。

是:Kafka使用者实例始终只接收来自一个Kafka群集的消息。也就是说,没有内置选项可以使用相同的消费者实例来读取2个以上的集群。但我认为你正在寻找不同的东西,见下文。

  

我只想在A关闭时使用来自群集B的消息,反之亦然。然而,消耗来自两个群集的消息将导致重复的消息。

没有内置的故障转移支持,例如在Kafka的消费者API中“如果群集A发生故障,则切换到群集B”。如果您需要这样的行为(如您的情况),则需要在使用Kafka使用者API的应用程序中执行此操作。

例如,您可以创建一个消费者实例以从群集A读取,监视该实例和/或该群集以确定是否需要故障转移到群集B,并且(如果需要)通过创建另一个消费者来执行故障转移到B.在A失败的情况下从B读取的实例。

然而,有一些问题使得这种故障转移行为比我的简化示例更复杂。一个难点是知道在切换到B时已经读取了来自集群A的哪些消息:这很棘手,因为通常,消息偏移在集群之间不同,因此确定是否已经读取消息的“副本”(在B中) (来自A)并非无足轻重。

注意:有时您可以在以下情况下简化此类应用程序/此类故障转移逻辑。消息处理是幂等的(即重复消息/消息的重复处理不会改变处理结果)。