写点什么

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

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

关注

评论

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

Logstash如何批量同步MySQL多表到ElasticSearch

北桥苏

elasticsearch Logstash ELK Stack

PoseiSwap:合规、隐私与支持更广泛的资产

鳄鱼视界

由Elasticsearch7.8评分脚本引起的一个索引迁移解决方法

北桥苏

elasticsearch Logstash ELK Stack

独一份,15年经验汇聚而成的《SpringBoot“踩坑”手册》首次开源

Java spring Spring Boot 框架

PoseiSwap:合规、隐私与支持更广泛的资产

股市老人

关于 PHP 启动 MongoDb 找不到指定模块问题

北桥苏

php mongodb

如何在业务代码中使用 ThinkPHP5.1 封装的容器内反射方法

北桥苏

thinkphp 反射调用

如何通过Logstash将MySQL数据同步到ElasticSearch

北桥苏

php MySQL elasticsearch Logstash

浅谈Kafka2.8+在Windows下的搭建与使用

北桥苏

php scala kafka

用扩展的方式在 PHP 中使用 Kafka

北桥苏

php Kakfa

Windows下hadoop环境搭建之NameNode启动报错

北桥苏

大数据 hadoop

Logstash同步MySQL一对多关联表到Elasticsearch父子文档

北桥苏

elasticsearch Logstash ELK Stack

逆袭!阿里专家手码23版Java面试三件套,Github星标直线狂飙

Java你猿哥

Java 微服务 面经 算法题 java核心知识点

最简单的canal 1.1.6服务搭建方法

北桥苏

elasticsearch canal

平台工程 | 内部开发者门户权威指南

杨振涛

DevOps 平台 平台工程 内部开发者平台 内部开发门户

Logstash同步MySQL关联表到Elasticsearch的嵌套文档中

北桥苏

elasticsearch Logstash ELK Stack

简单聊聊Java中线程安全有哪些实现思路?

Java 多线程

BOSS直聘首发半小时被下架!300MB实战SpringBoot笔记爆赞过百万

Java spring Spring Boot 框架

如何让ESP8266板子像APP开发一样方便

北桥苏

php 物联网 esp8266 mqtt

深入解析Java适配器模式:将接口转换为你所需要的形式

Java 适配器

Github火到CSDN, 字节高级架构师亲码出 elasticsearch 实战手册

Java 搜索引擎 elasticsearch ES

在Inteillj IDEA中使用Spark操作Hive

北桥苏

spark hive Big Data

单调栈模板总结及应用

timerring

算法

背废完虐面试官!字节架构师8年心血终成《图解设计模式》手册

Java 设计模式

SocketLog 的基本使用

北桥苏

php thinkphp SocketLog

干货力荐!京东首席架构师:亿级流量架构的核心技术文档

Java 架构 亿级流量

毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题

Java spring Spring Boot 框架

windows下Hive搭建踩坑汇总

北桥苏

hadoop hive hql

n-Track Studio 9录音、音频编辑一站式完成!

真大的脸盆

Mac 音频制作 Mac 软件 音频处理 录音工具

程序员晋升指南!13年顶级架构设计经验的锦囊妙计与实践分享

Java你猿哥

Java 架构 ssm 架构设计 架构师

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