速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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:004467

评论

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

华为云对象存储OBS,安全可靠的云存储服务,让企业轻松上云

科技之光

【融云出海白皮书免费看】出海洞察之沙特的「土豪行为」盘点

融云 RongCloud

白皮书 出海

聚焦云计算、大数据、人工智能等开源技术,这场开源开发者的盛会不容错过!

OpenAnolis小助手

人工智能 云计算 大数据 COSCon'22 开源盛会

精细化边缘安全防护:如何防止CDN域名被恶意刷量?

阿里云CloudImagine

CDN 边缘安全

Spring Boot「16」自定义错误页面

Samson

Java spring 学习笔记 spring-boot 10月月更

全嘉宾阵容官宣 | 2022 云原生峰会即将启动,实战派企业向你发出邀请

阿里巴巴云原生

阿里云 云原生 峰会

华为云CDN,如何赋能企业数字化发展?

IT科技苏辞

超高性价比的云服务器-华为云耀云服务器

科技之光

华为云对象存储OBS,为不同企业提供云存储方案,助力企业更好经营

科技之光

NFTScan 与 Cobo 达成合作,双方将共同推动 NFT 资管安全市场的发展

NFT Research

区块链 NFT 数据基础设施

华为云虚拟专用网络VPN,专为解决现代企业云链路痛点而生

科技怪授

网络 网络VPN

JavaScript刷LeetCode-字符串类解题技巧

Geek_07a724

JavaScript LeetCode

前端监控系列4 | SDK 体积与性能优化实践

字节跳动终端技术

性能优化 前端监控 sdk 体积优化

“程”风破浪的开发者|总结巧用CSS实现各种效果的「百计千谋」

叶一一

CSS 学习方法 前端 “程”风破浪的开发者

华为云弹性公网IP,如何解决现代企业的网络IP烦恼

科技怪授

弹性公网IP

聊一聊作为高并发系统基石之一的缓存

Java全栈架构师

Java 缓存 后端 高并发 架构师

JavaScript刷LeetCode拿offer-栈相关题目

js2030code

JavaScript LeetCode

这几款音乐人必备的软件,你了解吗?

懒得勤快

03 详细架构设计

神奇的叶叔叔

华为云CDN加速服务,如何让你的网速“飞”起来!

秃头也爱科技

【Java SE】Java程序的运行详解

安苒

Java

华为云虚拟专用网络VPN,助力现代企业云上业务创新发展

科技怪授

网络 网络VPN

10-6-华为云OBS大数据存算分离方案,助力企业顺利实现数字化转型!

科技之光

【DS】二叉树大总结!

安苒

数据结构 二叉树

Spring Boot「15」统一异常处理

Samson

Java spring 学习笔记 spring-boot 10月月更

2022云原生峰会开启报名 | 一年一度云原生技术风向标就看这里!

阿里巴巴云原生

阿里云 云原生峰会

Wallys/DR7915-wifi6-MT7915-MT7975-2T2R-support-OpenWRT-802.11AX-supporting-MiniPCIe-Module//QCA9882/QCA9880

wallys-wifi6

QCA9882 MT7915

微信小程序部署流程

codingyt

10月月更

华为云虚拟专用网络VPN,为现代企业打造优质的混合云计算环境

科技怪授

网络VPN

JavaScript刷LeetCode模板技巧篇(二)

Geek_07a724

JavaScript LeetCode

ript刷LeetCode拿offer-树的遍历

js2030code

JavaScript LeetCode

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