如何从 Kafka 中的两个不同集群消费?
How to consume from two different clusters in Kafka?
我有两个 kafka 集群,比如 A 和 B,B 是 A 的副本。我想仅当 A 关闭时才使用来自集群 B 的消息,反之亦然。然而,使用来自两个集群的消息将导致重复的消息。那么有什么方法可以配置我的kafka消费者只接收来自一个集群的消息。
谢谢--
So is there any way I can configure my kafka consumer to receive messages from only one cluster.
是:一个 Kafka 消费者实例将始终只接收来自一个 Kafka 集群的消息。也就是说,没有内置选项可以使用同一个消费者实例从 2 个以上的集群中读取数据。但我认为你正在寻找不同的东西,见下文。
I would like to consume messages from cluster B only if A is down and viceversa. Nevertheless consuming messages from both the clusters would result in duplicate messages.
Kafka 的消费者 API 中没有内置故障转移支持,例如 "switch to cluster B if cluster A fails"。如果您需要这样的行为(如您的情况),则需要在使用 Kafka 消费者 API.
的应用程序中这样做
例如,您可以创建一个消费者实例以从集群 A 读取数据,监控该实例 and/or 该集群以确定是否需要故障转移到集群 B,并(如果需要)执行到 B 的故障转移通过创建另一个消费者实例以在 A 失败时从 B 读取数据。
然而,有一些陷阱使得此故障转移行为比我的简化示例更复杂。一个困难是在切换到 B 时要知道来自集群 A 的哪些消息已被读取:这很棘手,因为通常集群之间的消息偏移量不同,因此要确定一条消息(在 B 中)的 "copy" 是否是已经读过(来自 A)不是微不足道的。
注意:有时您可以在某些情况下简化此类应用程序/此类故障转移逻辑。消息处理是幂等的(即重复消息/消息的重复处理不会改变处理结果)。
我有两个 kafka 集群,比如 A 和 B,B 是 A 的副本。我想仅当 A 关闭时才使用来自集群 B 的消息,反之亦然。然而,使用来自两个集群的消息将导致重复的消息。那么有什么方法可以配置我的kafka消费者只接收来自一个集群的消息。
谢谢--
So is there any way I can configure my kafka consumer to receive messages from only one cluster.
是:一个 Kafka 消费者实例将始终只接收来自一个 Kafka 集群的消息。也就是说,没有内置选项可以使用同一个消费者实例从 2 个以上的集群中读取数据。但我认为你正在寻找不同的东西,见下文。
I would like to consume messages from cluster B only if A is down and viceversa. Nevertheless consuming messages from both the clusters would result in duplicate messages.
Kafka 的消费者 API 中没有内置故障转移支持,例如 "switch to cluster B if cluster A fails"。如果您需要这样的行为(如您的情况),则需要在使用 Kafka 消费者 API.
的应用程序中这样做例如,您可以创建一个消费者实例以从集群 A 读取数据,监控该实例 and/or 该集群以确定是否需要故障转移到集群 B,并(如果需要)执行到 B 的故障转移通过创建另一个消费者实例以在 A 失败时从 B 读取数据。
然而,有一些陷阱使得此故障转移行为比我的简化示例更复杂。一个困难是在切换到 B 时要知道来自集群 A 的哪些消息已被读取:这很棘手,因为通常集群之间的消息偏移量不同,因此要确定一条消息(在 B 中)的 "copy" 是否是已经读过(来自 A)不是微不足道的。
注意:有时您可以在某些情况下简化此类应用程序/此类故障转移逻辑。消息处理是幂等的(即重复消息/消息的重复处理不会改变处理结果)。