限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

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

评论

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

池州控股集团财务共享项目启动啦!

用友BIP

财务共享

如何通过财务共享推进财务精细化管理

用友BIP

财务共享

专业解读财务共享实现财务数智化转型的有效路径

用友BIP

财务共享

国内半导体分立器件逐步向高端应用市场推进,未来可期

华秋电子

四川师范大学何云:事项法会计从五大方面助力企业创造价值

用友BIP

智能会计 价值财务 事项法会计

SpringBoot 实现启动项目后立即执行方法的几种方式

Java你猿哥

源码 jdk Spring Boot ssm

阿里全新推出:微服务突击手册,把所有操作都写出来了|超清PDF

Java你猿哥

Java spring Spring Cloud ssm Ribbon

用友协办国有资本投资运营公司第八次圆桌会议, 展示数智国资发展新路径

用友BIP

国资国企数智化转型

浅析财务共享各阶段面临的挑战

用友BIP

财务共享

更快速、更高效的键盘操作方式尽在Superkey Mac版~

真大的脸盆

Mac Mac 软件 键盘增强软件

TiDB x Flink x Iceberg 实时 ODS 实践

TiDB 社区干货传送门

实践案例 大数据场景实践 实时数仓场景实践 数据中台场景实践 OLAP 场景实践

TiDB 使用国内公有云和私有部署的 S3 存储备份指南

TiDB 社区干货传送门

数据库架构设计 6.x 实践

Github上星标55.9k的微服务神仙笔记真的太香了

Java 架构 微服务 Spring Cloud 设计模式

JVM—解析运行期优化与JIT编译器

Java JVM JIT

厦门狄耐克:助推智慧医疗,需要夯实自身的技术底座

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

华为云CodeArts Snap 智能编程助手PyCharm插件安装与使用指南

编码 插件 智能编程

太牛了!腾讯T9耗时69天整理出最全架构师进阶核心知识点笔记

Java

深入浅出微服务:40个微服务架构实战案例(Dubbo+Springcloud)

Java 微服务 Spring Cloud

秒杀系统常见问题—如何避免库存超卖?

秒杀系统 电商超卖

太香了!Alibaba内部架构师进阶指南,理论+实践双飞

Java 架构

开发敏捷高效 | 云原生应用开发与运维新范式

CODING DevOps

DevOps 云原生 CODING DevOps 开发运维 敏捷高效

微服务是不是金科玉律?基于Spring Cloud如何构建分布式系统?

Java 架构 微服务 Spring Cloud

跪了!Alibaba内部优质Springboot笔记:两大项目实战+源码解析

Java spring 微服务 Spring Boot 框架

如何将千亿文件放进一个文件系统,EuroSys'23 CFS 论文背后的故事

Baidu AICLOUD

文件存储 元数据

【5.19-5.26】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

惊喜!华秋DFM软件升级,新功能让你爱不释手

华秋电子

5000 字手把手实战|Kubernetes+极狐GitLab CI,获得极致 CI/CD 体验

极狐GitLab

Kubernetes DevOps 微服务 k8s CI/CD

软件测试的误解有哪些?

测吧(北京)科技有限公司

测试

500行代码代码手写docker-将rootfs设置为只读镜像

蓝胖子的编程梦

Docker 云原生 k8s #k8s Docker 镜像

属实不赖!Alibaba开源GitHub星标114K微服务架构全彩进阶手册

Java你猿哥

Java 架构 微服务 微服务架构 ssm

用友与临港集团签署战略合作协议

用友BIP

国资国企数智化转型

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