kafka流重新平衡高吞吐量kafka流服务的延迟峰值

bqf10yzr  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(317)

我们开始使用kafka流,我们的服务是一个非常简单的无状态消费者。
我们对延迟有严格的要求,当消费者群体重新平衡时,我们面临着太高的延迟问题。在我们的场景中,重新平衡将相对频繁地发生:滚动更新代码、放大/缩小服务、容器被集群调度器洗牌、容器死亡、硬件故障。
我们所做的第一个测试之一是让一个小的消费群体中的4个消费者处理少量的消息(1k/秒),并杀死其中一个;集群管理器(目前是aws-ecs,可能很快就会迁移到k8s)启动一个新的集群管理器。因此,不止一次的再平衡已经完成。
我们最关键的度量是延迟,我们将其度量为发布服务器中的消息创建和订阅服务器中的消息消耗之间的毫秒数。我们看到最大延迟从几毫秒增加到近15秒。



我们还做了一些滚动更新代码的测试,结果更糟,因为我们的部署没有为kafka服务做好准备,我们触发了很多重新平衡。我们需要对此进行研究,但是想知道其他人在尽可能减少延迟的情况下执行代码部署/自动缩放的策略是什么。
不确定这是否有帮助,但是我们对消息处理的要求非常宽松:我们不关心某些消息不时被处理两次,或者对消息的顺序要求非常严格。
我们使用的是所有默认配置,没有调优。
我们需要在重新平衡期间改善这种延迟峰值。有人能给我们一些提示吗?触摸配置是否足够?我们需要用一些混凝土分区吗?实施我们自己的?
在尽可能减少延迟的情况下,代码部署/自动缩放的推荐方法是什么?
我们的kafka版本是1.1.0,在查看了libs之后,例如kafka/kafka_2.11-1.1.0-cp1.jar,我们安装了confluent platform 4.1.0。在消费者方面,我们使用的是kafka streams 2.1.0。
谢谢你阅读我的问题和你的回答。

qni6mghb

qni6mghb1#

如果间隙主要是由再平衡引起的,也就是说没有触发再平衡,只是让aws/k8s去做他们的工作,恢复被弹回的示例,并支付弹回过程中不可用的时间段---请注意,对于无状态的示例,这通常是更好的,而对于有状态的应用程序,您最好确保重新启动的示例可以访问其关联的存储,以便在从changelog引导时进行保存。
为此:
在Kafka1.1中,为了减少不必要的重新平衡,您可以增加组的会话超时,以便协调器对没有心跳响应的成员变得“不那么敏感”——请注意,我们从0.11.0开始为流的使用者禁用了leave.group请求(https://issues.apache.org/jira/browse/kafka-4881)所以如果我们有一个较长的会议超时时,离开组的成员不会触发重新平衡,但成员重新加入仍会触发重新平衡。不过,少一次再平衡总比没有好。
不过,在即将到来的kafka2.2中,我们在优化再平衡场景方面做了很大的改进,主要是在kip-345中捕获的(https://cwiki.apache.org/confluence/display/kafka/kip-345%3a+introduce+static+membership+protocol+to+reduce+consumer+rebalances). 在kip-345中引入了一个合理的配置设置,这样滚动反弹将触发更少的再平衡。所以我强烈建议你升级到2.2,看看它对你的案例是否有帮助

相关问题