写点什么

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

  • 2016-02-18
  • 本文字数:1504 字

    阅读完需:约 5 分钟

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-02-18 18:002331
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

《原则》(八)

Changing Lin

6月日更

Kubernetes手记(5)- 配置清单使用

雪雷

k8s 6月日更

高性能 JavaScriptの七 -- 编程实践小技巧

空城机

JavaScript 大前端 6月日更

5W1H聊开源之What——开源协议有哪些?

禅道项目管理

开源

软件研发团队如何做好项目进度管理?

万事ONES

项目管理 研发管理 需求 ONES

云原生推动全云开发与实践

阿里巴巴云原生

云原生

Python——输入输出:加减乘除四则运算的程序

在即

6月日更

阿里云边缘容器服务、申通 IoT 云边端架构入选 2021 云边协同发展阶段性领先成果

阿里巴巴云原生

云原生

🏆【声网 Agora】「PC端实现实时语音通讯4.x」

洛神灬殇

WebRTC RTC征文大赛 声网 6月日更

JavaScript 中数组 sort() 方法的基本使用

编程三昧

JavaScript 大前端 数组 排序 js

HTTPS协议

IT视界

数字化转型背景下的测试转型

BY林子

敏捷测试 测试转型

异构内存及其在机器学习系统的应用与优化

白玉兰开源

人工智能 机器学习 解决方案 第四范式 傲腾

浅谈Java中的TCP超时

Hoswey_洪树伟

Java、

项目管理与项目集管理、项目组合管理的区别?

万事ONES

项目管理 项目 PMO ONES

区块链+金融:当前区块链应用场景中最具活力的领域

CECBC

学妹问,学网站开发还是打 ACM?

程序员鱼皮

Java 程序员 算法 大前端 ACM

Java--JVM运行流程

是老郭啊

Java JVM JVM原理

5分钟速读之Rust权威指南(十九)

wzx

rust 生命周期

为什么说产品经理也要学点技术?

LigaAI

产品经理 研发管理 技术团队 产品设计与思考

国内低代码产品是如何定位的?这3类,企业可自行对号入座

优秀

低代码

人人视频被迫下架:打击盗版视频网站任重道远

石头IT视角

分布式认知工业互联网如何赋能工业企业数字化转型?

CECBC

MySQL基础之六:连接查询

打工人!

myslq 6月日更

公司:离职就是一场危机管理

石云升

创业 职场经验 6月日更

给你一直尝试和创新的机会!走进亚马逊云科技MRC团队

亚马逊云科技 (Amazon Web Services)

操作系统内核是什么?Linux内核又是什么?读完这篇文章,我终于知道了

奔着腾讯去

c++ 操作系统 内存管理 Linux内核 进程管理

做通才还是专才,你会怎么选?

架构精进之路

认知提升 6月日更

不管是三胎还是App!指望“拉新”太难了,还是要靠老用户!

APP开发

spring-beans 注册 Beans(四)BeanDefinition

梦倚栏杆

加快技术应用规模化 建设世界先进水平区块链产业生态

CECBC

从 Chukwa 到 Keystone :Netflix 的数据流水线演进_语言 & 开发_臧秀涛_InfoQ精选文章