实时流处理新选择:LinkedIn重磅发布Samza 1.0

2018 年 12 月 03 日

实时流处理新选择:LinkedIn重磅发布Samza 1.0

AI 前线导读:近日,LinkedIn 正式发布了开源流式计算框架 Samza 的 1.0 版本。实时摄取和处理大量数据的能力对于越来越多的企业来说是一件非常有趣的事情。这是一个快速增长的领域,因为这些应用场景可以直接转化为商业利益。我们已经关注这个领域很长时间了,Apache Samza 1.0的发布是一个重新审视它的机会,我们拭目以待它将给这个领域带来哪些改变。


生于 LinkedIn


Apache Samza 于 2013 年在 LinkedIn 诞生,并于 2014 年成为 Apache 的顶级项目。现在,LinkedIn 有 3000 多个应用程序在使用它,用它来进行异常检测、欺诈检测、监控性能、通知、实时分析,等等。


如果你对这个领域有一定了解的话,那么你该知道,Apache Kafka 是另一个主要的实时数据处理框架,它最初也是由 LinkedIn 开发的。Kafka 成为 LinkedIn 跟踪数据的标准传输机制,并且每天都会向 Kafka 生成大量数据,应用程序从 Kafka 中获取洞见。


这些应用程序在消费 Kafka 的消息时需要处理一些常见的问题,例如检查点、本地状态管理、处理故障、伸缩处理,等等。Apache Samza 就是为解决流式处理中的这些问题而构建的。但问题是,这在过去可能是有意义的,但在今天还是这样的吗?


这听起来是一个奇怪的问题。毕竟,数据仍然在源源不断地流入,而且还在不断增加。不同之处在于,还有很多其他框架被构建用于满足完全相同的需求:Apex、Flink、Spark 和 Storm(这些还只是 Apache 的开源项目,当然还有其他一些专有的解决方案)。



LinkedIn Samza 团队负责人 Samarth Shetty 表示,当他们开始接触流式处理时,已有的流式处理框架很少能够帮助他们应对 LinkedIn 的规模或技术问题。因此,他们认为最好的办法是开发自己的框架:


“我们必须在Samza中加入增量快照和主机粘性(Host Affinity)等功能。当时的Apache Flink等框架还没有提供这些功能。Kafka Streams非常适合用于处理Kafka中的事件,但在LinkedIn,我们需要处理来自不同系统的事件,例如Azure EventHubs、AWS Kinesis等。

Samza提供了轻松连接到不同系统的能力。流式处理是LinkedIn的一个非常重要的应用场景,因此,我们致力于构建一个最好的框架。随着时间的推移,我们相信我们已经开发出了最先进的流式处理框架之一,最适合用来满足LinkedIn规模的处理需求。”


在某种程度上,这有点类似于机器学习领域的框架格局:有很多可用的框架,该如何选择?当然,有选择并不是件坏事,但“很多”和“太多”之间存在着一个界限。Facebook PyTorch 团队负责人 Soumith Chintala 也表达了类似的观点:我们想要一些对我们来说有用的东西,所以我们决定自己去构建。


兼容 Beam


然而,与 Kafka 和 Confluent 不同的时,Samza 并没有发展成为拥有独立供应商的产品。Shetty 说,LinkedIn 有一群工程师致力于从事流式处理开发工作,而 Samza 是这些工作不可或缺的一部分。他又补充说,他们并没有将 Samza 看成是一个产品:


“我们将其视为一个开源项目。LinkedIn一直以来都是以这种方式参与开源的——当我们认为我们构建的工具也能为其他公司带来价值时,那么在可能的情况下,我们希望将它们交给社区。

虽然目前没有与Samza挂钩的供应商,但包括Slack、TripAdvisor、Redfin和Optimizely在内的多家公司正在生产环境中使用它。我们认为,能够吸引其他组织使用Samza的一个事实是,它已经经过大规模的实战考验,因为LinkedIn就在使用它。”


我们知道,Apex 背后的供应商 DataTorrent 最近破产了。或许在这个时候,这个领域没有足够的空间容纳更多的开放核心的流式处理平台供应商。所以,如果你想要使用 Samza,必须想清楚,并自己想办法在生产环境中运行它,即使是最新的 1.0 版本也是这样。不过,在其他方面倒是发生了一些变化,可能会带来更广泛的影响。


Samza 提供了一组新的 API,与 Apache Beam 兼容。Apache Beam 是一个开源项目,提供了一组统一的 API,用于跨执行引擎移植处理管道,包括 Samza、Spark 和 Flink。Beam 还支持使用其他编程语言进行数据处理,包括数据科学领域的宠儿——Python。



在某种程度上,Samza 团队已经意识到,虽然稳定性和性能是 Samza 的核心优势,但它的编程 API 却相当低级。Samza 提供了一组简单的基于回调的 API,可用于指定消息级别的操作。


开发人员必须基于这组 API 自行实现复杂的操作,如窗口操作和连接操作。此外,需要使用 Kafka 主题将多个 Samza 作业连接在一起,这使得构建应用程序非常耗时且容易出错。


Samza 1.0 提供了一组高级 API,开发人员可以通过组合多个运算符来构建复杂的数据管道。但 Samza 团队不满足于此,他们又向前迈进了一步,让他们的 API 与 Apache Beam 兼容。


也就是说,现在可以使用 Java、Scala 或 Python 在 Beam 上开发流式应用程序,并且可以将它们移植到支持它们的框架中,甚至可以在 Google Cloud Dataflow 上运行它们——至少在理论上是这样的。


Flink 和 Spark 都提供了 Beam API 之外的专有扩展,而 Spark 创建者对支持 Beam 并不是很感兴趣。Spark 对 Beam 的支持主要是由社区提供的。


SQL 和 DevOps


但这些并非 Samza 1.0 的全部,因为它还带来了一些更重要的新功能:SQL 和 DevOps 改进。Samza 团队意识到,即使他们的 API 得到了升级,但并非所有人都喜欢使用 API。非工程师更愿意通过 SQL 访问数据,而 Samza 正在提供这样的功能。


我们说“正在”,是因为从技术层面看是可以实现 SQL 功能,但仍然需要通过 API 调用来使用这个功能。这种使用方式违背了降低使用门槛的目标,但 Shetty 指出,他们也正在为 SQL 创建交互式的 shell。SQL 已经成为流式处理的香馍馍——Kafka、Flink 和 Spark 都支持 SQL。



Samza 1.0 的另一个改进方面是集群管理器的独立性。在 Samza 1.0 之前,Samza 需要借助 YARN 进行资源管理和应用程序的分布式执行。虽然使用 YARN 没有什么问题,但用户希望能够灵活地在任意环境中运行流式处理。Samza 1.0 通过提供独立运行模式来解决这个问题。


这种模式允许将 Samza 作为库嵌入到应用程序中,并在任意资源管理器中运行。但还存在几个问题:独立模式还不支持像窗口和连接这样的有状态流式处理,并且对 Kubernetes 的支持还不够。Samza 团队正在努力解决这些问题。Samza 1.0 还支持表和流的连接,并改进了 Samza 应用程序的可测试性。


Samza 1.0 带来了巨大的改进。它背后的团队似乎意识到它的短板,并努力解决这些问题。他们也意识到了它的优势,例如 Samza 在一台机器上每秒可以处理 120 万条消息。


但问题是你应不应该使用它?如果你确信自己可以搭建、开发、部署和维护它,那么绝对值得一试。


但无论你是否会使用它,Samza 1.0 都是一个重要的里程碑。因为在 Apache Beam 似乎陷入僵局的时候,Samza 拉了它一把。并非每家公司都会像 LinkedIn 那样,并非每家公司都有建立和维护自己的框架的必要。但在目前看来,基于 Beam 进行开发似乎是可移植性方面的最佳选择。


Samza 1.0 发布详细公告:


https://engineering.linkedin.com/blog/2018/11/samza-1-0--stream-processing-at-massive-scale


英文原文:


https://www.zdnet.com/article/real-time-data-processing-just-got-more-options-linkedin-releases-apache-samza-1-0-streaming/


2018 年 12 月 03 日 17:171221
用户头像

发布了 731 篇内容, 共 359.6 次阅读, 收获喜欢 1824 次。

关注

评论 2 条评论

发布
用户头像
Kafka Stream 呢...
2018 年 12 月 03 日 20:22
回复
没有更多评论了
发现更多内容

你是否真的懂数组?

架构师修行之路

数组 数据结构与算法

微服务架构

不在调上

LeetCode题解:21. 合并两个有序链表,迭代(优化),JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

LeetCode题解:21. 合并两个有序链表,递归,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

【漫画】最近,老王又双叒get了CDN的新技能—可编程化敏捷开发

巨侠说

CDN

论做AI芯片的正确姿势

flow

2.2.2 类反射场景与使用 -《SSM深入解析与项目实战》

谙忆

主权投资基金或有助于实现可持续发展目标

CECBC区块链专委会

贵州:“区块链+”促经济转型产业升级

CECBC区块链专委会

Github+docsify零成本轻松打造在线文档网站

Java全栈封神

Java GitHub 全栈 文档 docsigy

为什么 90 后一言不合就跳槽?

非著名程序员

程序员 个人成长 职业成长 延迟满足感 即时反馈

最右JS2Flutter框架——动画、小游戏的实现(四)

刘剑

flutter 前端 探索与实践

libuv 异步网络编程之 TCP helloworld

Huayra

网络编程 libuv

当我们谈注册中心时谈什么?

小楼

zookeeper nacos 注册中心

支持 100 种语言的 Canva 是怎么做本地化管理的?

葛仲君

产品经理 本地化 产品本地化 国际化

9个常用ES6特性归纳(一般用这些就够了)

华为云开发者社区

Java 程序员 编程语言 ES6 编程效率

十二张图搞懂浏览器安全——(同源策略、XSS、CSRF、跨域、HTTPS、安全沙箱等知识点)

执鸢者

https 浏览器安全 同源策略 XSS 跨域

十五张图带你彻底搞懂从URL到页面展示发生的故事

执鸢者

前端 浏览器 页面展示

DT时代释放金融数据价值,驱动金融商业裂变

华为云开发者社区

金融科技 华为云 modelarts 数据价值 用户细分

5招详解linux之openEuler /centos7防火墙基本使用指南

华为云开发者社区

centos7 网络安全 防火墙 openEuler 网络环境

联盟链落地与激励机制

CECBC区块链专委会

week 10

Geek_2e7dd7

【权限系统设计】ACL, DAC, MAC, RBAC, ABAC模型的不同应用场景

小隐乐乐

F5G的星光闪烁,为工业而明,向未来而歌

脑极体

英特尔推出“OpenVINO领航者联盟”,携手DFRobot推进AI商业落地新探

飞天鱼2017

计算机网络基础(十七)---传输层-TCP的可靠传输

书旅

TCP 计算机网络 网络协议 计算机基础 TCP/IP

获奖名单公布 | 写作平台八月宠粉福利来袭,参与创作领取限时大奖~

InfoQ写作平台

写作平台 征稿 活动专区

超英文邮件50%!Flink 中文邮件列表必须有姓名

Apache Flink

flink

煌煌中原 化鲲为鹏

脑极体

week 10

Geek_2e7dd7

腾讯SaaS千帆对渠道的态度——合作共赢的诚意

人称T客

实时流处理新选择:LinkedIn重磅发布Samza 1.0-InfoQ