我们有一个由Kafka在Confluent上通信的微服务架构,其中每个服务都设置在其自己的使用者组中,以便在多个实例之间平衡消息传递。
例如:
SERVICE_A_INSTANCE_1 (CONSUMER_GROUP_A)
SERVICE_A_INSTANCE_2 (CONSUMER_GROUP_A)
SERVICE_A_INSTANCE_3 (CONSUMER_GROUP_A)
SERVICE_B_INSTANCE_1 (CONSUMER_GROUP_B)
SERVICE_B_INSTANCE_2 (CONSUMER_GROUP_B)
发出一条消息时,每个消费者组的一个实例只能使用它。
直到两天前,它都运行良好。突然之间,每条消息都被传递到所有实例,因此每条消息被多次处理。基本上,消费者组已停止工作,并且消息未分发。
重要点:
我们怀疑这可能是Confluent上的问题或与我们当前配置不兼容的更新。 Kafka 2.2.0 was recently released,它对消费者群体的行为有所改变。
我们目前正在努力迁移到AWS MSK,以查看问题是否仍然存在。
关于什么原因的任何想法?
答案 0 :(得分:0)
TL; DR:我们通过从Confluent迁移到GCP上自己的Kafka集群来解决了这个问题。
一段时间以来,我将回答我自己的问题,我们已经解决了这个问题。另外,我的见解可能会帮助其他人就将Kafka基础架构部署到何处做出更明智的决定。
不幸的是,我们无法深入了解Confluent的问题。这很可能是因为他们支持我们,因为我们只是简单地迁移到GCP上的自管理实例,一切恢复正常。
在我关于将Confluent用作托管Kafka服务的最终想法和警告之前,需要进行一些重要的澄清:
考虑到所有这些点,我们的结论是,对于那些决定通过Confluent使用托管服务的公司而言,最好的方法是在包含高级支持的情况下计算成本。否则,Kafka会变成一个完全封闭的黑匣子,从而无法诊断问题。我个人认为,问题期间对Confluent团队的依赖是如此之大,以至于在需要时没有准备好帮助他们就使服务无法投入生产。