GMTC北京站9折购票倒计时,部分日程已上线,戳此查看 了解详情
写点什么

Netflix 详述 Keystone Data Pipeline 的演进过程

  • 2016 年 3 月 30 日
  • 本文字数:1445 字

    阅读完需:约 5 分钟

近日,Netflix 公司介绍了他们使用其最新版 Keystone Data Pipeline 的方式,Keystone Data Pipeline 是一款针对业务与产品分析的 PB 级可伸缩的实时事件流处理系统。

目前几乎所有的 Netflix 程序主要使用三个版本的 pipeline,这三个版本的 pipeline 可以概括如下:

  • 从 Chukwa 到 S3,基于 Elastic Mapreduce(EMR)后续处理的数据获取。
  • 流水线(Kafka fronted)分支的相同的 pipeline。它支持 S3 到 EMR 流程, 也支持像 Druid 和 Elasticsearch 这样的通过一个新的路由服务的实时流处理工具。
  • RESTful Kafka 实现控制平面管理流入新版本的路由服务,然后由 consumer Kafka,Elasticsearch,或其他 consumer 如 Mantis 或者 Spark 获取相应服务。

版本 1 的端至端数据传输用了 10 分钟。batch pipeline 使用 S3 作为持久性存储,使用 EMR 进行数据处理。并且 Chukwa 是不可复制的,这使得它对 downstream sinks 很敏感。

后来在 1.5 版本时,Chukwa 的 SocketTeeWriter 允许分支到 Kafka 的 pipeline,它突出了早期版本 pipeline 可扩展性和不影响现有功能的派生能力。

1.5 版本引入了 Kafka fronted branch,即流向 consumer,或者流向路由服务,该服务对余外的 Kafka streams 或 Elasticsearch. 进行过滤和转让活动。Netflix 的一个实时数据基础机构工程师 ----Steven Wu 指出:

我们要针对不同的 sink(S3,ES,secondary Kafka)隔离单独的路由工作。 否则,一个 sink 运行中断会影响其他 sink 的相同的路由的工作。 我们有很多 ES 和 secondary Kafka 集群。

Steven Wu 补充说,downstream sink 可能会影响 upstream publish 服务,我们在提供对其的隔离和缓冲时,会导致“每个事件类型 / 流建立一个主题”。

新分支在 Elasticsearch 中暴露了其事件实时流量的 30%,而其他 Kafka stream 用于转化,或在 Spark 中用于一般数据处理的需要。这样就能在 Python、Scala 和 R 中进行实时交互式数据分析。

这种路由服务是由多个 Docker 容器组成,Docker 容器跨 EC2 实例运行 Samza 的 job。独立的 EC2 feet 管理 S3、Elasticsearch 和 Kafka route,并且生成的容器级别性能监控数据。latencies, lags 和 sinks 生成的统计汇总也用于分析流水线的各个部分性能。

特别的,在围绕 Kafka fronte 和路由服务这一块,许多成果来自于实时分支执行。 Steven Wu 指出:

Kafka 高层次的 consumer 可能会失去分区的所有权,并且运行一段时间稳定后会停止耗费一些分区。 这就要求我们反弹处理。

当我们推出新的代码,有时高层次的 consumer 在重新平衡的过程中会停留在一个糟糕的状态。

根据 Netflix 在 2.0 版本中的总结,要从 1.5 版本吸取经验,从而创建具有“三个主要组成部分” 的 pipeline。 第一个部分是通过获取直接写到 Kafka 一个 Java 库,并且获取例如 Python 语言 post JSON 到 HTTP 代理组件进访问。

第二个部分是缓冲部件包括作为持久消息队列的 Kafka,以及新的用于管理第三部分控制平面服务,该服务是一个路由服务。其中在摘要中提到的促成因素是“管理这些 job 和集群的运营开销 [是] 增加负担”

Netflix 能够在这个领域(Topic)发挥更大的作用,就像 Kafka 在海量云服务上做到的一样,实施使用 Samza 路由服务,并且实现如何为路由服务管理和部署 Docker 容器。

查看英文原文: Netflix Details Evolution of Keystone Data Pipeline


感谢张龙对本文的审校。

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

2016 年 3 月 30 日 19:001402
AI

评论

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

leetcode141. 环形链表

Damien

算法 链表 LeetCode

程序员陪娃漫画系列——当她想吃的时候

孙苏勇

程序员 生活 陪伴 漫画

第一次手动编译openjdk11

py ploughman

jdk

Centos 7 使用Firewalld

Kevin Liao

Centos 7 防火墙 Firewalld防火墙 Firewalld

做一个好产品的初衷:用户值得

池建强

创业 产品 写作

排序系列堆/二分插入

脚动两轮男之漂流小王子

Java并发编程系列——分布式锁

孙苏勇

Java zookeeper 并发编程 多线程 分布式锁

程序员为什么要提高赚钱能力?程序员如何提高赚钱能力?

陆陆通通

赚钱

笔记:《如何系统思考》之因果回路图

wiflish

思维方式

NIO看破也说破(一)—— Linux/IO基础

小眼睛聊技术

Linux 架构 后端 Netty nio

创投机会诞生在这四个核心变量中 | 2019年在某大学课堂做的一次讲演的实录

邓瑞恒Ryan

创业 管理 投资 行业资讯

排序系列计数/基数

脚动两轮男之漂流小王子

Web3极客日报#135

谢锐 | Frozen

区块链 独立开发者 技术社区 Rebase Web3 Daily

为什么厉害的人精力都那么好?

非著名程序员

程序员 程序人生 提升认知 精力管理

MySQL自增ID以及其他唯一ID方式分析

Bruce Duan

MySQL自增ID 唯一ID

Redis学习笔记(安装)

编程随想曲

redis

基准测试神器JMH —— 详解36个官方例子

捉虫大师

Java 性能 JMH

排序系列归并/timsort

脚动两轮男之漂流小王子

冥想与呼吸法之于情绪控制

树上

情绪 冥想 呼吸法 呼吸 自我

人人都要有经营意识

Neco.W

创业 重新理解创业 公司管理

花更多的时间在自己的优势上

Neco.W

创业 自我管理 重新理解创业

游戏夜读 | 工具游戏的辉煌

game1night

leetcode8. 字符串转换整数 (atoi)

Damien

算法 数学

排序系列插入/希尔

脚动两轮男之漂流小王子

Centos 7 安装RabbitMQ(RPM)

Kevin Liao

RabbitMQ RPM安装

Golang杂谈 - graceful shutdown为何离奇失效?

星语

后端 平滑重启 服务端 Go 语言

Impala UDTF 功能实现

小鹏

大数据 hadoop cloudera 数据仓库

Java并发编程基础--线程

Java收录阁

Java 线程

第三方支付概述

cf

支付 网联 备付金

排序系列之选择/冒泡

脚动两轮男之漂流小王子

排序系列快排/内省

脚动两轮男之漂流小王子

Netflix详述Keystone Data Pipeline的演进过程_AI_Dylan Raithel_InfoQ精选文章