我们开始使用 Kafka 流,我们的服务是一个非常简单的无状态消费者。
我们对延迟的要求很严格,当消费者组重新平衡时,我们面临着过高的延迟问题。在我们的场景中,重新平衡会相对频繁地发生:滚动更新代码、扩大/缩小服务、容器被集群调度程序洗牌、容器死亡、硬件故障。
我们所做的第一个测试是让一个由 4 个消费者组成的小型消费者组处理少量消息(1K/秒)并杀死其中一个;集群管理器(目前是 AWS-ECS,可能很快就会转向 K8S)启动一个新的集群管理器。因此,进行了不止一次的重新平衡。
我们最关键的指标是延迟,我们将其衡量为发布者中的消息创建和订阅者中的消息消费之间的毫秒数。我们发现最大延迟从几毫秒飙升至近 15 秒。
我们还进行了一些滚动更新代码的测试,但结果更糟,因为我们的部署没有为 Kafka 服务做好准备,并且触发了很多重新平衡。我们需要解决这个问题,但想知道其他人在以尽可能小的延迟进行代码部署/自动扩展时遵循的策略是什么。
不确定这是否有帮助,但我们对消息处理的要求相当宽松:我们不关心某些消息不时被处理两次,或者对消息的顺序非常严格。
我们使用所有默认配置,没有进行任何调整。
我们需要改善重新平衡期间的延迟峰值。有人可以给我们一些关于如何处理它的提示吗?触摸配置就够了吗?我们需要使用一些具体的分区分配器吗?实施我们自己的?
以尽可能最小的延迟进行代码部署/自动扩展的推荐方法是什么?
我们的Kafka版本是1.1.0,在查看libs后发现例如kafka/kafka_2.11-1.1.0-cp1.jar,我们安装了Confluence平台4.1.0。在消费者方面,我们使用Kafka-streams 2.1.0。
感谢您阅读我的问题和您的回复。