写点什么

LinkedIn 开源 Cruise Control:一个 Kafka 集群自动化运维新利器

  • 2017-09-03
  • 本文字数:2746 字

    阅读完需:约 9 分钟

Kafka 近年来日渐流行,LinkedIn 的 1800 台 Kafka 服务器每天处理 2 万亿个消息。虽说 Kafka 运行得十分稳定,但要大规模运行 Kafka,在运维方面仍然面临巨大的挑战。每天都会有 broker 崩溃,导致集群工作负载不均衡。SRE 团队需要花费大量的时间和精力来重分配分区,以便让集群重新恢复均衡。

自动化因此变得十分重要,这也就是为什么我们要开发 Cruise Control :持续监控 Kafka 集群,自动调整分配给服务器的资源,达到预期的性能目标。用户设定目标,Cruise Control 对集群的工作负载进行分析,并自动执行一些操作来达成目标。

Cruise Control 即日起在 GitHub 上开源。在这篇文章里,我们将介绍 Cruise Control 的使用场景、它的架构以及我们在开发 Cruise Control 过程中面临的挑战。

设计目标

  • 可靠的自动化: Cruise Control 要准确地分析集群的工作负载,生成无需人工介入的执行计划。
  • 资源有效性: Cruise Control 要智能地执行操作,不会影响集群处理正常的工作负载。
  • 可扩展性: Kafka 用户对可用性和性能会有不同的需求,还可能使用各种不同的部署工具、管理端点和度量指标收集机制。Cruise Control 必须能够满足用户定义的各种目标,并执行用户定义的操作。
  • 通用性:尽管很多现有的产品可以用于均衡集群的资源,但它们大部分都与应用程序毫无关联,需要通过迁移整个应用进程来恢复均衡。这类产品对于无状态的系统来说是没有问题的,但对于有状态的系统来说就会显得有点力不从心,因为这类系统的很多状态与应用进程相关联。因此,我们希望 Cruise Control 会是一个能够了解应用程序的通用性框架,在恢复均衡时只需要进行一小部分状态迁移。

Cruise Control 在 LinkedIn 的应用

Cruise Control 在 LinkedIn 主要解决以下几个问题。

  1. 保证 Kafka 集群资源的均衡:磁盘、网络和 CPU。
  2. 如果有 broker 崩溃,自动将副本重新分配给其他 broker,并重置复制系数。
  3. 识别出消耗资源最多的主题分区。
  4. 在扩展集群或 broker 退役时只需要少量的人工介入。
  5. 支持异构的 Kafka 集群以及单台主机部署多个 broker 实例。

Cruise Control 的工作原理

Cruise Control 遵循的是“监控——分析——行动”这样的工作流程。下图是 Cruise Control 的架构图。大部分组件都是可插拔的,如度量指标取样器(metric sampler)、分析器(analyzer)等。

REST API

Cruise Control 为用户提供了一组 REST API,可以用于查询 Kafka 集群的工作负载情况或触发管理操作。

负载监控器

负载监控器从集群收集 Kafka 的度量指标和每个分区的资源度量指标,并生成集群工作负载模型,包括磁盘使用情况、CPU 使用情况、流量流入速率、流量流出速率等,然后把模型发送给探测器和分析器。

分析器

分析器是 Cruise Control 的“大脑”,它根据用户提供的优化目标和来自负载监控器的工作负载模型来生成优化计划。用户可以配置优化计划的优先级,还可以分别设定硬性目标和软性目标。硬性目标是指必须达成的目标(例如必须根据机架来分配副本的位置),软性目标是指在优先满足硬性目标的前提下有可能得不到满足的目标。

硬性目标

  1. 根据机架来安排副本的位置,即同一个分区的副本必须被放在不同的机架上,这样可以减少硬件崩溃给 Kafka 集群带来不利的影响。
  2. broker 的资源使用必须处在预定义的阈值内。
  3. 网络使用不能超过预定义的容量。如果一个 broker 的所有副本都成为首领,那么所有的消费者流量都会被重定向到这个 broker 上,导致网络流量膨胀。

软性目标

  1. 让集群所有的 broker 使用相同的资源。
  2. 让所有 broker 的首领分区达到相同的流量流入速率。
  3. 让主题的分区均匀地分布在所有 broker 上。
  4. 在所有 broker 上均匀地分布分区副本。

探测器

探测器主要用于探测两种类型的异常。

  1. broker 失效:比如一个非空闲的 broker 离开集群,导致分区不同步。因为这种情况在集群正常重置时也会发生,所以探测器在触发告警之前会预留一段时间,如果不是正常重置,就会触发告警并进行修复。
  2. 偏离目标:如果启用了自愈功能,Cruise Control 会尝试通过分析工作负载并执行优化计划解决问题。

执行器

执行器负责执行由分析器生成的优化计划。Kafka 集群的再均衡通常会涉及重新分配分区,执行器要对资源保持感知,避免拖垮 broker。分区重分配可能需要很长时间,一个大型的集群可能需要几天时间才能完成一次分区重分配。有时候,用户希望能够停止正在进行的分区重分配,所以执行器需要确保能够安全地中断执行计划。

有趣的挑战

在开发和使用 Cruise Control 时,我们遇到了很多有意思的挑战。

为 Kafka 构建可靠的集群工作负载模型

这个比看上去的要难得多,需要考虑到很多细节。例如,从 broker 上收集 CPU 度量指标是很容易的,但我们该如何量化每个分区的 CPU 使用情况?这个 Wiki 页对这个问题进行了解释。

你们愿意花多少时间在一个优化计划上?

分析器组件经历了一个漫长的演化过程。我们最开始使用了一个具有复杂配置功能的通用优化器,它需要几周的时间才能得到一个中型 Kafka 集群的优化计划。后来,我们改用现在的优化器,可以在几分钟之内得到一个较好的结果。

内存与速度的权衡

Cruise Control 是一个内存密集型的应用,因为它需要在内存里保存度量指标一段时间,以便分析流量模式。同时,它也是一个 CPU 密集型的应用,因为它需要大量的计算来生成优化计划。这两者之间存在冲突关系。为了加快生成优化计划,我们需要缓存更多的数据,进行更多的并行计算,但这样会使用更多的内存。我们需要在这两者之间做出权衡。例如,我们会预计算优化计划并缓存起来,当用户发起查询时就不需要等待那么长时间。另外,我们会交错执行内存密集型的任务,避免同时消耗大量内存。

未来的工作

更多的集群优化目标

Cruise Control 的优化组件是可插拔的,用户有可能会根据实际需要提出各种复杂的优化目标。作为一个开源项目,我们鼓励用户创建自己的优化目标,并把它们贡献给社区。

与云管理系统集成

目前,Cruise Control 通过移动失效 broker 的分区让集群保持正常运行。我们希望后续能够与云管理系统集成起来,实现自动集群扩展,或者使用空闲实例替换失效的 broker 实例。

增强运维洞见

Cruise Control 分析从 Kafka 收集而来的度量指标,帮助 SRE 团队量化各种资源度量指标的影响程度,提升容量规划和性能调优的能力。

通用性

我们在开发 Cruise Control 时就意识到动态负载均衡器对于分布式系统来说是非常重要的。用于聚合度量指标、分析资源使用情况、生成优化计划的 Cruise Control 组件同样适用于其他分布式系统。从长远来看,我们想把这些核心组件抽象出来,用在其他的项目上。

查看英文原文: Open Sourcing Kafka Cruise Control


感谢蔡芳芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-09-03 19:004533

评论

发布
暂无评论
发现更多内容

可视大盘+健康分机制,火山引擎DataLeap为企业降低资源优化门槛!

字节跳动数据平台

大数据 数据治理 成本治理 企业号9月PK榜

中国机械总院张红新:强化集团级数据治理 业财融合助力企业降本增效

用友BIP

业财融合 2023全球商业创新大会

WorkPlus即时通讯app打通业务与生态,实现高效管理与协同

BeeWorks

Java21上手体验-分代ZGC和虚拟线程 | 京东云技术团队

京东科技开发者

Java ZGC 虚拟线程 企业号10月PK榜

小程序等轻应用技术是不是对企业有价值?

Onegun

小程序 轻应用

JPEX事件对于香港加密货币发展的影响

区块链软件开发推广运营

数字藏品开发 dapp开发 区块链开发 链游开发 NFT开发

深入理解树状数组 | 京东物流技术团队

京东科技开发者

bit #数据结构 企业号10月PK榜 树状数组

超越React,JS代码体积减少90%!它为何是2023年最好的Web框架?

互联网工科生

Vue React Web框架 Astro

WorkPlus定制化的局域网会议软件,提供安全稳定的会议体验

BeeWorks

百万架构师亲码的亿级流量下的分布式限流解决方案

小小怪下士

Java 程序员 高并发 秒杀

MQ技术比较

周晓宁

API接口安全运营研究

Noah

API接口文档 API 安全 API接口安全

小游戏的来龙去脉及入局方式

Onegun

小游戏 小游戏开发

开源生态建设,正成为智能世界发展的关键

新消费日报

用友全球司库十问(四)|企业如何实现融资债券数据信息的实时监控?

用友BIP

全球司库

泰山众筹APP开发,泰山众筹商城开发

V\TG【ch3nguang】

Lightroom Classic 2022 for mac(Lrc中文版) 11.5完整激活版

mac

LRC2022 图像处理软件 苹果mac Windows软件 Lightroom Classic 2022

【数据库审计】2023年数据库审计厂家汇总

行云管家

数据库 数据库审计 等保合规

WorkPlus国产化即时通讯工具:安全可靠的国内沟通利器

BeeWorks

利用美国服务器增加线上业务的客户人群

一只扑棱蛾子

服务器 美国服务器

安全高效的政企内部通讯解决方案WorkPlus IM平台

BeeWorks

cad设计绘图软件:AutoCAD 2024最新版中文

mac大玩家j

CAD绘图 CAD设计 cad cad工具

亚马逊云科技2023柏林峰会主题演讲总结

亚马逊云科技 (Amazon Web Services)

Amazon AIGC

第一个程序:HelloWorld——IDEA 使用

小齐写代码

云管理平台基本功能有哪些?适配国产化平台吗?

行云管家

云计算 信创 国产化 云管平台 云管理

2023 KiCon Asia 11月12日 深圳见!

华秋电子

kicad

鲲鹏DevKit 23.0:流水线中便捷迭代鲲鹏版本,迁移、开发、调优无缝衔接

彭飞

启动!中交集团携手用友搭建海外人力资源数智化平台

用友BIP

中企出海 数智人力

好用的图书阅读器 OmniReader Pro激活中文版

胖墩儿不胖y

Mac软件 图书阅读工具 图书阅读

LinkedIn开源Cruise Control:一个Kafka集群自动化运维新利器_语言 & 开发_Jiangjie Qin_InfoQ精选文章