【问题标题】:Kafka listener with Canary deployment具有 Canary 部署的 Kafka 侦听器
【发布时间】:2022-12-20 09:41:31
【问题描述】:
先决条件如下:融合的云集群、配置了侦听器的 Java 应用程序、具有 2 个节点的 Canary 部署。
在部署期间发送事件时(当时有 2 个节点处于活动状态)有时会从金丝雀节点激活 Kafka 消费者,消费消息并完成其余工作。但对我来说,如果来自另一个(稳定)节点的 Kafka 消费者将比第二个节点更早地消费消息,那就更合适了。如果两个消费者都使用相同的消息,这也可能是解决方案。
有没有办法以某种方式配置它?
【问题讨论】:
标签:
java
apache-kafka
confluent-platform
【解决方案1】:
是的,可以通过允许您控制哪个节点使用来自 Kafka 主题的消息的方式来配置您的 Kafka 侦听器和 Canary 部署。有几种不同的方法可以做到这一点,具体取决于您的具体要求和设置的详细信息。
您可以采用的一种方法是使用 Kafka 消费者组。当你使用一个消费者组时,这个组中的所有消费者都会分担消费来自 Kafka 主题的消息的工作量。这意味着组中的每个消费者都会收到来自该主题的消息的子集,并且消息将平均分布在组中的消费者之间。
要使用消费者组,您需要使用唯一的组 ID 配置您的 Kafka 侦听器。此组 ID 将标识您的消费者组并允许 Kafka 代理将消息路由到适当的消费者。然后你可以启动多个 Kafka 侦听器实例,每个实例都具有相同的组 ID,它们将自动形成一个消费者组并分担消费来自 Kafka 主题的消息的工作量。
这种方法有一些好处。首先,它允许您在多个消费者之间分配消费消息的工作量,这可以提高系统的性能和可扩展性。其次,它允许您控制组中消费者之间的消息分发,这对于实施金丝雀部署或其他部署策略很有用。
您可以采用的另一种方法是使用 Kafka 分区。 Kafka 主题分为分区,每个分区包含主题中消息的子集。默认情况下,Kafka 消费者将消费来自主题中所有分区的消息,但您可以将消费者配置为仅消费来自特定分区的消息。