写点什么

LinkedIn 是如何使用 Apache Samza 的?

  • 2014-03-25
  • 本文字数:3035 字

    阅读完需:约 10 分钟

Apache Samza 是 LinkedIn 最近开源的一款流处理器。在题为《 Samza:LinkedIn 的实时流处理》的演讲中,Chris Riccomini 探讨了 Samza 的功能集,它如何与 YARN 和 Kafka 集成,LinkedIn 如何用它,以及其未来路线图是什么。

发生在 LinkedIn 的大部分处理是 RPC 样式的数据处理,这种情况需要非常快速的响应。在响应延迟谱的另一端是批处理,此处,他们大量使用了 Hadoop。Hadoop 处理和批处理通常发生在事后,经常晚几个小时。

这样,在异步 RPC 处理和 Hadoop 样式的处理之间就出现了空白。对于前者,用户正积极等待响应;而对于后者,尽管已经努压缩,但仍然需要很长的时间才能运行完。

这个空白就是 Samza 适用的地方。我们可以在此处对数据进行异步处理,但也不能等待几个小时。操作时间通常以毫秒到分钟为单位。我们的想法是相对快速地对数据进行处理,并将其返回到需要它的地方,不管是下游系统,还是某个实时服务。

Chris 谈到,目前,在工具和环境方面,对流处理的支持最差。

对于这种类型的处理,LinkedIn 看到了许多应用场景——

  • 当人们进入另一家公司、当他们喜欢一篇文章、当他们加入一个团体等等情况下进行新闻推送显示。

新闻无法接受延时传播,如果使用 Hadoop 进行批量计算,那么响应时间可能是几个小时,甚至是一天之后。从新闻中非常快速地获取趋势分析文章很重要。

  • 广告——获取相关广告,以及跟踪和监控广告显示、点击次数和其它指标
  • 复杂监控——允许执行像“过去一分钟里最慢的五个页面”这样的复杂查询。

LinkedIn**** 的现有生态系统

Samza 背后的动机及其架构都受到 LinkedIn 现有生态系统的巨大影响。因此,在深入研究 Samza 之前,对现有生态系统有个大概的了解很重要。

Kafka 是 LinkedIn 几年前发布的一个开源项目。它是一个满足消息队列和日志聚合两个需求的消息系统。LinkedIn 的所有用户活动,所有的指标和监控数据,甚至是数据库变更都会进到这个系统。

LinkedIn 还有一个名为 Databus 的专用系统,该系统将他们所有的数据库做成了一个流模型。它像一个包含了每个键值对最新数据的数据库。但当该数据库变化时,他们实际上可以将变化集做成一个流。每个单独的变化是那个流中的一条消息。

因为 LinkedIn 有 Kafka,而且已经集成了好几年,所以 LinkedIn 的许多数据,几乎全部,都是流格式,而不是数据格式或者存储在 Hadoop 上。

创建 Samza 的动机

Chris 谈到,当开始用 Kafka 和他们系统中的所有数据做流处理的时候,他们是从一个类似 Web 服务的东西开始的,它会启动,从 Kafka 读取消息并做一些处理,然后将消息写回。

在做这件事的时候,他们意识到,要使它真正有用并具备可扩展性,有许多问题需要解决。比如分区:如何划分流?如何划分处理器?如何管理状态,其中状态本质上是指在处理器中维护的介于消息之间的东西,或者如果每次有消息到达的时候,计数器就会加 1,那么它也可以是像总数这样的东西。如何重新处理?

至于失败语义,我们会得到至少一次,或者至多一次,或者恰好一次消息,也有不确定性。如果流处理器与另一个系统交互,无论它是个数据库,还是依赖于时间或者消息的顺序,如何处理那些真正决定最终输出结果的数据?

Samza 试图解决其中的部分问题。

Samza**** 架构

流是 Samza 最基本的元素。较之对其它流处理系统的预期,Samza 的流定义更严格而且堪称重量级。为了减少延时,其它处理系统,如 Strom,往往有非常轻量化的流定义,比如说,从 UDP 到直接 TCP 连接的一切。

Samza 采用了不同的做法。首先,它希望流能够分区。它希望这些流是有顺序的。如果先读了消息 3,又读了消息 4,那么就无法在一个单独的分区里颠倒它们的顺序。它还希望流能够回放,就是说以后可以回头重读一条消息。它希望流具备容错能力。如果分区 1 里面的一台主机不复存在,那么流在其它主机上应该仍然可读。另外,流通常是无限的。一旦到达了流的末尾——比如说,分区 0 的消息 6——只需要在有消息时设法重新读取下一条。那种情况并不是结束。

这个定义可以很好地映射到 Kafka,于是,LinkedIn 用它做了 Samza 的流基础设施。

在 Samza 中,有许多概念需要理解。要点是——

  • ——Samza 处理流。流是由一定数量的类型或类别相似的不可变消息组成。可以通过像 Kafka 这样的消息系统(其中每个主题是一个 Samza 流)或者数据库(表)或者甚至是 Hadoop(HDFS 中的一个文件目录)提供实际的实现。

诸如消息排序、批处理之类的事情是由流来处理的。

  • “作业(Jobs)”——Samza 作业是在一组输入流上执行逻辑转换从而将消息附加到一组输出流的代码。
  • 分区——为了可扩展性,每个流都被划分成一个或多个分区。每个分区都是一个完全有序的消息序列。
  • “任务(Tasks)”——也是为了可扩展性,每个作业被分解成多个任务后进行分配。任务使用作业输入流相应分区中的数据。
  • 容器——分区和任务是逻辑并行单元,而容器是物理并行单元。每个容器是一个运行一个或多个任务的 Unix 进程(或者 Linux cgroup)。
  • TaskRunner ——TaskRunner 是 Samza 的流处理容器。它负责启动、执行以及关闭一个或多个 StreamTask 实例。
  • 检查点(Checkpointing)”——检查点通常用于故障恢复。如果一个 taskrunner 由于某种原因宕掉了(比如,硬件故障),当重新启动时,它应该使用最后离开时的消息——这是通过检查点实现的。
  • 状态管理——需要在不同的消息处理之间传递的数据称之为状态——它可以是保存一个总数那样简单的东西,也可以是复杂得多的东西。Samza 允许任务维持一种持久可变且可查询的状态,而且,它与每个任务在物理上处于同一位置。状态需要具备高可用性:如果出现任务失败的情况,它可以在任务故障转移到另一台机器时还原。

数据存储是可插拔的,但 Samza 带有一个开箱即用的键 - 值存储。

  • YARN(Yet Another Resource Manager)是 Hadoop v2 在 v1 基础上做的最大改进——它将 Map-Reduce 作业追踪器从资源管理中剥离出来,并允许 Map-reduce 替代方案使用相同的资源管理器。Samza 使用 YARN 进行集群管理、故障跟踪等。

Samza 提供了一个 YARN ApplicationMaster 和一个开箱即用的 YARN 作业运行程序。

读者可以通过查看详细架构来了解各种组件之间如何交互,也可以通过阅读整个文档来了解每个组件的细节。

可能的改进

在Samza 中使用诸如YARN 这样的组件有一个好处,就是允许在已经运行了草案任务、测试任务和MapReduce 任务的同一个网格上运行Samza。对于上述所有的任务,都可以使用相同的基础设施。不过,由于现有的设置完全是试验性的,LinkedIn 目前还没有在一个“多框架(multi-framework)”环境下运行Samza。

Chris 说,为了进入一个更大的多框架环境,进程隔离还需要做得更好一些。

结论

Samza 是 Apache 的一个正在孵化中项目,相对还不成熟,因此还有很大的改进空间。使用 hello-samza 工程是一个不错的入门方式,那是个很小的东西,在大约 5 分钟之内就可以配置好并运行。通过它,可以使用来自维基百科服务器的实时更改日志来弄清楚发生了什么,而且它还提供了一连串可供使用的东西。

建立在 Hadoop 之上的 STORM 是另一个流处理器项目。读者可以查看 Samza 和 STORM 比较

关于作者

Chris Riccomini是 LinkedIn 的一名资深软件工程师,他目前是 Apache Samza 项目的提交者和 PMC 成员。在 LinkedIn,他参与了众多项目,包括:“你可能认识的人(People You May Know)”、REST.li、Hadoop、工程工具和 OLAP 系统。在加入 LinkedIn 之前,它在 PayPal 从事数据可视化和欺诈行为建模工作。

查看英文原文:**** How LinkedIn Uses Apache Samza

2014-03-25 06:569990
用户头像

发布了 256 篇内容, 共 90.4 次阅读, 收获喜欢 12 次。

关注

评论

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

跨平台的SSH、Telnet和SFTP客户端Termius for Mac v8.4.0直装激活版

Rose

Termius for Mac破解

怎样在touchbar养电子宠物? Touch bar pet for Mac 在macbook上养一只宠物

Rose

MacBook 电子宠物 touchbar

Apple Intelligence将在今年10月推出?AI毛绒玩具BubblePal回答人类幼崽十万个为什么!|AI日报

可信AI进展

人工智能

微服务架构革新:百度Jarvis2.0与云原生技术的力量

百度Geek说

微服务架构 企业号2024年7月PK榜 百度商业产品矩阵 Jarvis应用托管平台

Databend 开源周报第 155 期

Databend

油猴Safari浏览器辅助插件 油猴脚本Tampermonkey mac版下载安装教程

Rose

Tampermonkey插件 油猴脚本使用

ShareSDK第三方平台使用指南——新浪微博

MobTech袤博科技

Java 开发者 产品动态

2024 ChinaJoy,火山引擎以AI大模型为动能推进游戏玩法创新

新消费日报

文献解读-遗传病-第二十五期|《通过贝叶斯和单倍型预测胎儿基因型进行单基因病的无创产前诊断》

INSVAST

基因测序 基因数据分析 生信服务 遗传病测序 遗传病

Pod 卡在 Terminating 怎么办?

小猿姐

Kubernetes kubernetes pod

超13万律师使用的工具,启信宝推出“司法大数据”功能

合合技术团队

人工智能 大数据 司法

日程管理多源归一,服务场景一键直达

HarmonyOS SDK

HarmonyOS

小间距LED显示屏:引领显示技术新潮流

Dylan

技术优势 LED显示屏 全彩LED显示屏 led显示屏厂家 市场

macOS Catalina for mac (macos 10.15系统)v10.15.7正式版

Rose

Autodesk AutoCAD2020(附安装教程图解) 激活特别版 mac/win

Rose

AutoCAD2022序列号 autocad2022秘钥

macos big sur 软件icons图标大全(新增至2719枚大苏尔风格图标)

Rose

macOS Sonoma 14.6 (23G80) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos Sonoma

JProfiler for Mac(Java开发分析软件) JProfiler

Rose

Java 开发 JProfiler 14下载 JProfiler 14破解版

数据分析统计Minitab Express for Mac破解补丁 及安装教程 兼容m芯片

Rose

数据统计 Mac 软件 数据分析软件 Minitab Express下载 Minitab Express破解版

低代码平台在采购管理中的革新与应用

天津汇柏科技有限公司

低代码 采购管理 软件定制开发

B端常用交互方式的量化及优化实践和指引|得物技术

得物技术

web前端 交互 企业号2024年7月PK榜

React 的 KeepAlive 实战指南:深度解析组件缓存机制

袋鼠云数栈

前端 技术人 UED keepalive keep-alive实现原理

最佳实践分享 I 流程挖掘助力头部科技企业信创之路数字化转型

望繁信科技

数字化转型 降本增效 科技企业 流程挖掘 望繁信科技

综合性价比超越硅谷,PPIO派欧云发布下一代推理加速引擎

极客天地

AlDente Pro :苹果电脑电池管理工具 延长电池寿命

Rose

苹果电脑 电池管理 AlDente Pro破解版 电池寿命

谷歌新AI模型在国际奥数竞赛达到银牌标准!OpenAI推出AI搜索引擎SearchGPT挑战谷歌!|AI日报

可信AI进展

人工智能

硅纪元视角 | 苹果AI训练数据大曝光,坚持用户隐私第一

硅纪元

基于大模型的对话式数据分析产品“腾讯云 ChatBI ”正式上线公测

腾讯云大数据

腾讯云 BI

Autodesk AutoCAD 2024 Mac破解补丁版 cad2024中文安装教程 兼容m芯

Rose

LinkedIn是如何使用Apache Samza的?_开源_Roopesh Shenoy_InfoQ精选文章