Allegro在切换至XFS后将Kafka生产者延迟异常值降低了82%

Allegro 通过优化 Apache Kafka 生产者尾部延迟的实践

Allegro 公司通过实验不同的性能优化选项,最终将其所有 Kafka 集群迁移到 XFS 文件系统,显著改善了 Apache Kafka 生产者的尾部延迟。在此过程中,Kafka 协议嗅探、JVM 性能分析以及 eBPF 技术被证明是识别和消除性能瓶颈的关键工具。

背景与问题

Allegro 广泛使用 Apache Kafka 作为其微服务间异步通信的核心。由于新项目对低延迟消息传递的要求较高,工程师在审查 Kafka 生产者延迟指标时发现,p99 延迟为 1 秒,p999 延迟高达 3 秒。这种高尾部延迟无法满足新功能的需求,因此团队需要找出并解决这一问题。

分析方法

为了定位高尾部延迟的根本原因,Allegro 的软件工程师 Maciej Mościcki 和 Piotr Rżysko 考虑了多种方法。他们决定追踪单个请求,分析 Kafka 处理生产请求的组件,以揭示延迟峰值的原因。他们放弃了修改 Kafka 源代码的耗时且侵入性较强的方法,转而采用其他替代方案。

工具与技术

团队首先使用 ext4slower 工具分析文件系统操作相关的延迟。该工具基于 eBPF(扩展的伯克利包过滤器),能够为 Linux 内核构建网络、安全和可观测性工具。通过 async-profiler 和 eBPF 工具,团队发现 Kafka 代理代码中的锁争用是导致高延迟的部分原因。此外,他们还使用 ebpf_exporter 将基于 eBPF 的指标暴露为 Prometheus 格式,并在 Grafana 中可视化。

优化过程

通过深入分析,团队确定日志提交是延迟的主要来源。他们尝试了 ext4 文件系统的不同优化方案,包括使用写回日志模式和改进的快速提交机制。这些优化使 p999 延迟分别降低到 800 毫秒和 500 毫秒。

在探索 ext4 文件系统的日志机制和设置时,团队发现 XFS 文件系统提供更高级的日志功能,并且 Apache Kafka 文档中也推荐使用 XFS。经过测试,XFS 显著改善了尾部延迟特性。最终,团队将所有 Kafka 代理迁移到 XFS,并观察到 Kafka 生产者延迟异常值减少了 82%,超过了 SLO(服务水平目标)的 65 毫秒。

结论

工程师强调,仅分析延迟指标是不够的,追踪单个请求对于确定慢速写入的根本原因至关重要。使用 eBPF 及相关工具对于捕获和暴露文件系统操作的详细延迟指标是必不可少的。通过这一系列的优化,Allegro 成功提升了 Kafka 的性能,满足了新项目对低延迟的需求。

阅读 21
0 条评论