对于每个服务,我们都有一个特定的Kafka主题
每个服务都有其Kafka主题和该主题的消费者组。
这里每个服务都是不同主题的消费者,但它们的消费者组名称是相同的。
如果我们在同一个组中添加另一个服务,是否会影响其他3个服务,因为它们也共享相同的ConsumerGroup名称,尽管它们绑定到不同的主题?或者,如果一个新的消费者被添加到Service3,Kafka需要为主题分区重新平衡消费者吗?这是否会影响其他话题,因为他们共享消费者团体名称?
我认为消费者组与主题相关联,即使其他主题消费者具有相同的消费者组名称,也不应该影响。
您可以让多个消费者订阅多个主题,拥有相同的消费者群体。但建议将每个主题订阅的同一应用程序的所有用户实例都加入到单个用户组名称中,这就是KAFKA实现发布的方式-
这也是为了实现KAFKA原生功能,例如LB(负载平衡)、FT(容错)和每个消费者组(即每个消费者应用程序)更好的成员资格管理。
同样,它是有效的,只有重新平衡才会像代码一样成为生产的问题。
仅供参考,刚刚在我的本地测试了这种行为,并指出它总是重新平衡,当消费者实例(2个中的一个)手动停止/启动时。
我有以下堆栈。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
</parent>
<confluent.version>5.2.2</confluent.version>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.13</artifactId>
</dependency>
当您将新使用者添加到同名组中时,它将重新平衡,并暂时停止该组中的所有其他使用者,是的。
理想情况下,如果每个服务使用自己独特的主题,则每个服务都有自己的使用者组。这样,服务重新启动不会影响其他服务。
我有一个场景,我已经在不同的节点上部署了4个Kafka消费者实例。我的主题有4个分区。现在,我想配置消费者,使他们都从主题的不同分区获取。 我知道一个事实,如果消费者来自同一个消费者组,他们会确保分区被平分。但在我的情况下,他们不在同一组。
如果将与有状态重试一起使用,以便每次重试都从代理轮询消息,则存在消费者组重新平衡的长重试周期可能导致分区被重新分配给另一个消费者的风险。因此,有状态重试周期/尝试将被重置,因为新消费者不知道重试的状态。 举个例子,如果重试最长期限是24小时,但消费者组重新平衡平均每12小时发生一次,则重试永远无法完成,一旦超过保留期限,消息(及其背后的消息)最终将从主题中过期。(假设在此时间内未解决可重试异常的原
我正在编写一个概念验证应用程序来使用Apache Kafka0.9.0.0中的消息,看看是否可以使用它而不是通用的JMS消息代理,因为Kafka提供了好处。这是我的基本代码,使用新的消费者API: 我使用默认设置启动了一个kafka服务器,并使用shell工具启动了一个kafka生产者,以便将消息写入我的主题。然后,我使用这段代码与两个使用者连接,发送正确的服务器来连接,发送主题来订阅,其他一切都
我有两个Kafka制作人向具有多个分区的同一主题发送消息。 正如预期的那样,来自同一生产者PR1的具有相同密钥K1的消息总是转到同一分区PA1。 问题是来自另一个生产者PR2的具有相同密钥K1的消息转到另一个分区PA2,而我希望它们也转到PA1。 Kafka不是在制片人之间保留分区分配吗? 是否与两个生产者使用不同的Kafka客户端库有关? 如果我设置两个制作人使用相同的id,会有帮助吗?
根据Kafka的文件: kafka保证主题分区只分配给组中的一个消费者。 但我在服务中观察到了不同的行为。以下是一些细节: 我用的是Kafka2.8和SpringKafka2.2.13。 最初我有一个Kafka主题包含5个分区,这个主题在我的服务中使用了Spring和ConcurrentKafkAlisterContainerFactory中的注释,并发性=5。这个配置对我来说很好。 后来,我开始
我有4个分区和4个消费者(例如A、B、C、D)。如何使用使用者组配置哪个使用者将从哪个分区读取数据。我用的是Kafka的春靴。