apache-kafka - Kafka 消费组突然停止在实例之间平衡消息
问题描述
我们有一个由 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)
当一条消息发出时,它应该只被每个消费者组的一个实例消费。
这工作正常,直到两天前。突然之间,每条消息都被传递到所有实例,因此每条消息都会被处理多次。基本上,消费者组停止工作并且消息没有被分发。
要点:
- 我们在 GCP 上的 Confluent 中使用 Kafka paas。
- 我们在不同的环境中对此进行了测试,一切都按预期工作
- 我们的消费者没有发生任何变化
- 我们没有对集群进行任何更改(我们不知道 Confluent 是否更改了某些内容)
我们怀疑这可能是 Confluent 上的问题或与我们当前配置不兼容的更新。Kafka 2.2.0 最近发布,它对消费者群体的行为进行了一些更改。
我们目前正在努力迁移到 AWS MSK,以查看问题是否存在。
关于可能导致这种情况的任何想法?
解决方案
TL;DR:我们通过从 Confluent 迁移到我们自己的 GCP 上的 Kafka 集群解决了这个问题。
我会回答我自己的问题,因为它已经有一段时间了,我们已经解决了这个问题。此外,我的见解可能会帮助其他人就在哪里部署他们的 Kafka 基础架构做出更明智的决定。
不幸的是,我们无法深入了解 Confluent 的问题。这很可能是他们这边的事情,因为我们只是迁移到 GCP 上自己的自我管理实例,一切都恢复了正常。
在我对使用 Confluent 作为托管 Kafka 服务的最终想法和警告之前,有一些重要的澄清:
- 我们认为这与特别影响 Node.js 的某些事情有关。我们用 Node 以外的语言测试了外部库,结果符合预期。在对多个最流行的 Node 库进行测试时,问题仍然存在。
- 我们没有对 Confluent 提供高级支持。
- 我无法确认这个问题不是我们的错。
考虑到所有这些要点,我们的结论是,对于决定使用 Confluent 托管服务的公司,最好计算包含高级支持的成本。否则,Kafka 会变成一个完全封闭的黑匣子,无法诊断问题。在我个人看来,在出现问题时对 Confluent 团队的依赖是如此之大,以至于没有他们准备好在需要时提供帮助会导致服务无法生产。
推荐阅读
- python - Python中的曲线拟合受到具有正导数的约束
- sql - 如何建立父子关联,删除子项将删除父项,反之亦然
- c# - Android:如何记录应用程序的使用次数?
- ios - 防止恢复第一响应者
- maven - Maven:未找到安装的本地依赖项
- thymeleaf - 在 thymeleaf 3.0.0 版本中替代 TemplateResolver
- reactjs - 错误:找不到模块“。” 将图像传递给子组件时
- ios - UIDocument 保存错误:无法获取属性值
- javascript - 同步检索随机数量的记录 ID,更改按钮文本并从“服务器”异步检索相应记录
- javascript - 从对话框内的角度材料表单提交