NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

评论

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

一张长图带你看懂物联网产业十数载“江湖风云”!

亚马逊云科技 (Amazon Web Services)

物联网

亚马逊云科技 loT 百亿连接力量

亚马逊云科技 (Amazon Web Services)

亚马逊云

STI即将登录Gate.io,我们有哪些期待?

小哈区块

VNC中文是什么意思?全称是什么?

行云管家

运维 服务器 vnc

科创中国开源创新榜单发布,EMQX 获评“年度优秀开源产品”

EMQ映云科技

开源 物联网 IoT emq emqx

web前端培训nginx配置规则

@零度

nginx 前端开发

如何优雅的记录操作日志

flyhero

Java Spring Boot 后端 造轮子 4月月更

看板的作用是什么?任务看板如何跟进

阿里云云效

云计算 阿里云 持续交付 看板 项目协作

省掉80%配置时间,这款Mock神器免费又好用

Liam

前端 前端开发 Postman 前端教程 web前端开发

STI生态迎来新进展,登录Gate.io意味着什么?

西柚子

初创企业需要CRM系统的原因

低代码小观

初创公司 企业管理系统 CRM系统 客户关系管理系统 初创型企业

OpenHarmony 3.1 Beta版本关键特性解析——OpenHarmony图形框架

OpenHarmony开发者

OpenHarmony 动画效果

进阶篇|有了这招,用文本编辑器搞前端代码都能保证格式统一

Jianmu

运维 前端 自动化 工作流 格式化

从趋势到必选项,探讨企业数字化转型方式方法

华为云开发者联盟

数据 数字化 企业数字化转型 业务数字化

去中心化的 React Native 架构探索

Shopee技术团队

前端 去中心化 React Native

【高并发】一文秒懂Happens-Before原则

冰河

并发编程 多线程 协程 异步编程 精通高并发系列

恒源云(Gpushare)_自动化训练小技巧白送给你,不要吗?

恒源云

OSS SSH hy-tmp

hash,bloomfilter,分布式一致性hash

Linux服务器开发

分布式 hash 后端开发 Linux服务器开发 C++后台开发

借品牌升级之际,谈一谈技术开发者为什么选择 InfoQ 写作社区

宇宙之一粟

4月月更 InfoQ写作社区2周年

多个私有云设施管理用什么云管理软件好?

行云管家

云计算 私有云 云管理 多有云

java培训SpringBoot自动装配原理

@零度

JAVA开发 springboot

企业如何搭建一个有效的知识管理系统

小炮

企业知识管理 企业知识管理工具

48天打造你的专属 Twilio——浅谈运营商通信中台

网易云信

通信

踩了个DNS解析的坑,但我还是没想通

捉虫大师

DNS 问题排查 4月月更

大数据培训Hive如何控制map个数与性能调优参数

@零度

hive map 大数据开发

用uniapp写一个内外循环的全选与反选,不会的赶紧围观

CRMEB

问题来了!拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗?

Java全栈架构师

程序员 架构 面试 计算机网络 底层知识

Sitemap的重要性

源字节1号

软件开发 网站优化

记一次CPU持续增长的问题解决

BUG侦探

Python py-spy CPU增长问题

腾讯二面:Linux操作系统里一个进程最多可以创建多少个线程?

Java全栈架构师

Linux 程序员 架构 面试 操作系统

百度程序员开发避坑指南(移动端篇)

百度Geek说

移动端

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