写点什么

从 Chukwa 到 Keystone :Netflix 的数据流水线演进

2016 年 2 月 18 日

2015 年 12 月,Netflix 新的数据流水线 Keystone 上线。本文将介绍近年来 Netflix 数据流水线的演进。这是介绍新的 Keystone 数据流水线系列文章的第一篇。

Netflix 是一家数据驱动的公司,很多业务和产品决策均基于数据分析作出。数据流水线的作用是在云上收集、聚合、处理和移动数据。Netflix 的几乎每一款应用都会用到该数据流水线。

先来看 Netflix 数据流水线的一些数据:

  • 每天 5000 亿事件, 1.3PB 数据
  • 峰值时间每秒处理 800 万事件,24GB 数据

有数百种事件会通过该流水线,如:

  • 视频观看活动
  • UI 活动
  • 错误日志
  • 性能事件
  • 问题定位和诊断事件

这里需要注意的是,运维相关指标不通过该流水线处理,而是有一个独立的系统—— Atlas ,和 Netflix 的其他很多技术一样,该系统也开源了。

在过去这些年,因为需求的变化和技术的发展,Netflix 的数据流水线有几次大的变化。

V1.0 Chukwa 流水线

原始的数据流水线,唯一目的就是聚合事件,并将其上传到 Hadoop/Hive 进行批处理。从下图中也可以看出,架构相当简单。 Chukwa 收集数据,并以 Hadoop 顺序文件格式将它们写入到 S3 中。大数据平台团队进一步处理 S3 文件,然后以 Parquet 格式写入到 Hive 中。从一端到另一端的延迟高达 10 分钟。不过对于通常以天或小时的频率扫描数据的批处理作业而言,也足够了。

V1.5 带有实时分支的 Chukwa 流水线

随着 Kafka Elasticsearch 的出现,Netflix 对实时分析的需求也不断增长。这里的“实时”指的是延迟小于 1 分钟。

除了将事件上传到 S3/EMR,Chukwa 还能将流量发到 Kafka(实时分支的前端)。在 V1.5 中,大约有 30% 的事件会进入实时流水线。实时分支的核心是 Router。它负责将数据从 Kafka 路由到不同的地方,如 Elasticsearch 或次级 Kafka。

过去两年,Elasticsearch 在 Netflix 的应用增长迅速。现在有 150 个集群,总计 3500 个实例,上面有 1.3PB 数据。绝大部分数据都是通过该数据流水线进来的。

在 Chukwa 将流量发到 Kafka 时,既可以是完整的流,也可以是过滤之后的。有时还需要进一步过滤从 Chukwa 写到 Kafka 的流,这就是引入 Router 的目的所在——可以消耗一个 Kafka 主题,并生成一个不同的 Kafka 主题。

在数据到了 Kafka 之后,用户可以使用 Mantis Spark 或定制的应用来做实时的流处理。“自由与责任”(Freedom and Responsibility)是 Netflix 文化的基因。用户自己选择合适的工具来处理手头的任务。

因为研发团队擅长处理数据的大规模迁移,所以将 Router 设计成了一个托管服务。在运维路由服务的过程中,他们也得到几点教训:

  • Kafka 高层消费者可能会丢失分区(partition)所有权,在稳定运行一段时间后,不再处理某些分区。需要重启消费者进程才能恢复。
  • 当推出新代码时,有时高层的消费者会在重新平衡过程中陷入错误状态。
  • 将路由作业分组,放到一系列集群上,不过管理这些作业和集群的成本持续增长。所以需要更好的平台来管理路由作业。

V2.0 Keystone 流水线 (Kafka fronted)

除了上面提到的与路由相关的问题,还有其他几点考虑促使我们重新架构我们的数据流水线:

  • 简化架构
  • Kafka 实现复制,可以提高系统的可靠性,而 Chukwa 不支持复制。
  • Kafka 有一个非常活跃、生机勃勃的社区。

有 3 个主要组件:

  • 数据获取——有两种方式:使用 Java 库,直接写入 Kafka;或者
    发送给 HTTP 代理,然后由代理写入 Kafka。
  • 数据缓冲——Kafka 作为复制的持久消息队列。
  • 数据路由——路由服务负责将数据从前端的 Kafka 移到 S3 、 Elasticsearch 和次级 Kafka。

过去几个月,Keystone 已经应用于生产中。目前开发团队仍然在改进 Keystone,着重于 QoS、伸缩性、可用性、可运维性和自服务等方面。

查看英文原文: Evolution of the Netflix Data Pipeline

2016 年 2 月 18 日 18:001652
用户头像
臧秀涛 极客邦科技技术会议负责人

发布了 300 篇内容, 共 114.3 次阅读, 收获喜欢 21 次。

关注

评论

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

mPaas-RPC拦截器各种场景下的使用指南

阿里云金融线TAM SRE专家服务团队

RPC

K8s事件监控之kube-eventer

雪雷

k8s事件告警 k8s资源监控 k8s管理

三分钟搞懂依赖注入

喵叔

K8s可视化监控之-Weave Scope

雪雷

k8s k8s可视化 k8s监控

GitOps工具Argo CD实战

雪雷

DevOps CI/CD gitops argo cd

支付宝蜻蜓刷脸支付

诸葛小猿

支付宝 蜻蜓 刷脸支付

极客公园张鹏对话百度CTO王海峰,揭秘中国AI的今昔与前路

脑极体

Java单例模式一文通

喵叔

Gitlab CI之单元测试和代码扫描

雪雷

单元测试 CI/CD gitlab ci 代码扫描

Istio微服务治理笔记(一)

雪雷

istio 服务治理 server mesh

Ceph集群部署

雪雷

分布式存储 Ceph rdb pvc

曾经每个手机上都有的游戏,作为前端如今你也能开发出来了,附教程

web前端程序猿

html5 前端 前端训练 前端教程 web前端

一文带你检查Kubernetes应用是否为最佳实践

雪雷

k8s k8s最佳实践

Kubernetes config多集群管理工具

雪雷

k8s kubecm k8s多集群管理 kubeconfig

Gitlab CI进阶之共享CI库

雪雷

DevOps gitlab CI/CD gitlab ci

微服务链路追踪之Jaeger

雪雷

全链路监控 Jaeger

Prometheus + Grafana详解

雪雷

监控 Grafana Prometheus 告警

API统一管理平台-YApi

雪雷

YAPI API接口管理

SonarQube集成gitlab/jenkins

雪雷

jenkins sonar gitlab ci 代码扫描

Java 生成解析二维码

喜瑞斯

Go: 使用pprof收集样本数据

陈思敏捷

go golang pprof

搜狗联合清华天工研究院推出ChoreoNet模型:让数字人随着音乐翩翩起舞

脑极体

微服务注册发现配置中心-consul

雪雷

Consul 服务注册与发现 配置中心

使用null条件运算符调用事件处理程序

喵叔

Kubernetes-学习必备(awesome-kubernetes-notes)

雪雷

学习 k8s入门 k8s文档 k8s知识

玩K8S不得不会的HELM

雪雷

k8s Helm

Guacamole实战

雪雷

guacamole 远程登录 堡垒机

微服务API网关-Kong详解

雪雷

kong api 网关

大数据技术思想入门(一):分布式存储特点

抖码算法

Java 大数据 hadoop 分布式

等级三整理之深信服

Lane

RabbitMQ实践

雪雷

RabbitMQ 消息队列

从 Chukwa 到 Keystone :Netflix 的数据流水线演进-InfoQ