写点什么

Pinterest 开源 Kafka 集群自愈和工作负载均衡工具:DoctorKafka

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

    阅读完需:约 5 分钟

Pinterest 是一个进行图片分享的社交站点。他们使用 Kafka 作为中心化的消息传输工具,用于数据摄取、流处理等场景。随着用户数量的增加,Kafka 集群也越来越庞大,对它的管理日趋复杂,并变成了运维团队的沉重负担,因此他们研发了 Kafka 集群自愈和工作负载均衡工具 DoctorKafka,最近他们已经在 GitHub 上将该项目开源。

根据 Pinterest 的数据工程师 Yu Yang 的博客文章介绍,该网站已经有1.75 亿以上的用户,Pin 图片的数量超过了1000 亿,目前,他们在云端运行了1000 个以上的Kafka broker。

在这样的规模下,每周他们都会遇到Kafka broker 的故障,有时候一天之内就会遇到好几次。当broker 出现故障时,待命的工程师需要及时将已经处于死亡状态的broker 替换掉,从而尽可能减少数据丢失的风险。他们有时候还需要在broker 之间转移工作负载,以保证整体负载的均衡。在替换broker 和重新平衡工作负载时,需要非常小心地创建和编辑分区重分配文件(partition reassignment file)并手动执行Kafka 脚本命令。这些操作会明显增加团队的负担。

为了扩展Kafka 服务的运维规模,Pinterest 构建了DoctorKafka,这是一项Kafka 集群自愈和工作负载均衡的服务。DoctorKafka 能够探测到Kafka broker 的故障并自动将故障broker 的负载转移给健康的broker。现在,Pinterest 已经在 GitHub 上将该项目开源。

高层架构

DoctorKafka 由三部分组成,如下图所示:

图 1 DoctorKafka 的高层架构

  • 部署在每个 broker 上的指标收集器(metrics collector),它会定期收集 Kafka 进程和主机的指标,并将其发布到一个 Kafka 主题上。在这里,使用了 Kafka 作为 broker 的状态存储,这样的话,能够简化 DoctorKafka 的搭建过程并减少对其他系统的依赖;
  • 中心化的 DoctorKafka 服务会管理多个集群,分析 broker 的状态指标以探测 broker 的故障,执行集群自愈和负载均衡的命令。DoctorKafka 会将执行的命令记录在另外一个名为“Action Log”主题上;
  • 用于浏览 Kafka 集群状态和执行流程的 Web UI 页面。图 2 展现了两个测试集群的管理界面,图 3 展现了其中一个集群的详细视图。

图 2 DoctorKafka 的前端页面

图 3 DoctorKafka 的集群视图

需要注意的是,DoctorKafka 只会采取有把握的操作,对于不确定的情况,它会给出告警。

DoctorKafka 的实际运行过程

每个 broker 上都会运行一个指标收集器,它会收集 Kafka broker 输入和输出的网络流量指标以及每个副本(replica)的状态。图 4 展现了指标收集器所收集的 broker 的部分状态。即便采用副本配额配置(replication quota setting,在 Kafka 0.10.1 之后可用的特性),主题分区的重分配通常也会带来额外的网络流量并且会影响到指标,因此,指标收集器在收集指标时会明确报告某个主题分区正在进行重分配。

图 4 指标收集器所收集到的 broker 状态

DoctorKafka 服务启动之后,它会首先读取 broker 最近 24 到 48 小时的状态,基于此,DoctorKafka 会推断每个副本工作负载所需的资源。因为 Kafka 工作负载主要是网络密集型的,DoctorKafka 主要关注副本的网络带宽使用情况。

DoctorKafka 在启动之后,会阶段性地检查每个集群的状态。当探测到 broker 出现故障时,它会将故障 broker 的工作负载转移给有足够带宽的 broker。如果在集群中没有足够的资源进行重分配的话,它会发出告警。与之类似,当 DoctorKafka 进行工作负载平衡时,它会识别出网络流量超出配置的 broker,并将工作负载转移给流量更少的 broker,或者是执行更优的领导者选举(leader election)方案来转移流量。

DoctorKafka 已经在 Pinterest 运行了数月之久,并帮助其运维人员管理着 1000 个以上的集群。现在,他们将其开源,对于 Pinterest 的工程师来说,开源是非常重要的事情。读者可以访问该项目的 GitHub 地址获取源码和相关文档。


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

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

2017-09-03 19:002633

评论

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

AI时代下,应用动态化开发有新的思路?

Speedoooo

灰度发布 热更新 小程序容器 小程序技术 动态化技术

Java 开发瓶颈破局:飞算 JavaAI 如何一站式生成标准化项目结构?

飞算JavaAI开发助手

G1原理—G1垃圾回收过程之Mixed GC

不在线第一只蜗牛

Java 算法 JVM

越读,越AI读:华为阅读用科技重新定义“阅读自由”

最新动态

IoTDB MCP 获官方收录!从冷门协议到行业焦点:MCP 如何改变 AI 与数据的交互方式?

Apache IoTDB

VMware Cloud Director Availability 4.7.3 - 灾难恢复和迁移 (DRaaS 解决方案)

sysin

vmware

金仓KingbaseES两地三中心方案简介

金仓技术

KingBase 金仓数据库

掌握设计模式--代理模式

量贩潮汐·WholesaleTide

设计模式

澳鹏(中国)9大垂类数据服务能力全景解读

澳鹏Appen

数据标注 大模型 垂类大模型

YashanDB 知识库|自动选举参数配错引发的“连锁反应”,你中招了吗?

数据库砖家

数据库·

飞算 JavaAI 的 “高并发处理” 方案:如何应对流量高峰

飞算JavaAI开发助手

飞算JavaAI深度评测:从代码生成到工程化落地的完整能力

飞算JavaAI开发助手

接单流程设计探索

京东科技开发者

金仓数据库KingbaseES客户端编程接口侧负载均衡技术解析

金仓技术

KingBase 金仓数据库

通义灵码入选 “2025 年值得关注的 AIGC 产品”,是唯一入选的 AI 编程产品

阿里云云效

阿里云 云原生 通义灵码

从重复编码到设计:飞算 JavaAI 助力程序员跳出「低阶陷阱」

飞算JavaAI开发助手

飞算 JavaAI “智能引导” 功能:小白一天也能成为 Java 高手

飞算JavaAI开发助手

从编码执行者到系统指挥官:AI时代程序员的价值跃迁之路

飞算JavaAI开发助手

金仓数据库KingbaseES系统故障的排查方法

金仓技术

KingBase 金仓数据库

邀请函丨解锁颗粒仿真新视界:2025 Altair EDEM离散元技术研讨会报名启动!

Altair RapidMiner

制造业 数字孪生 CAE 离散元 EDEM

YashanDB知识库|账号被锁了怎么办?一文教你快速定位和解锁!

数据库砖家

数据库·

绝味20岁生日会,鸭厂鹅厂联手发布中国零售连锁AI垂直场景大模型

脑极体

AI

通义灵码入选 “2025 年值得关注的 AIGC 产品”,是唯一入选的 AI 编程产品

阿里巴巴云原生

阿里云 云原生 通义灵码

加速鸿蒙生态建设,APP混合开发或许是企业抢占增量流量的机会

Speedoooo

ai框架 小程序容器 小程序技术 纯血鸿蒙 鸿蒙生态

VMware Cloud Director Availability 4.7.2 - 灾难恢复和迁移 (DRaaS 解决方案)

sysin

vmware

迈向深度智能:CoT数据集如何让大模型学会「一步一步思考」?

数据堂

AI 数据集 大模型 思维链 CoT数据集

Kubernetes弹性扩容:助力AI大模型部署与运维的云原生实践

inBuilder低代码平台

高并发下单库存扣减异常?飞算 JavaAI 自动化生成分布式事务解决方案

飞算JavaAI开发助手

2025 Java 框架痛点全解析:如何避免性能瓶颈与依赖混乱

飞算JavaAI开发助手

探索Playwright:前端自动化测试的新纪元

京东科技开发者

C.AI 推出 AvatarFX 模型:让图片角色开口说话;Grok 升级视觉理解,支持多语种语音和语音实时搜索丨日报

声网

Pinterest开源Kafka集群自愈和工作负载均衡工具:DoctorKafka_语言 & 开发_张卫滨_InfoQ精选文章