写点什么

流处理和Lamda架构中的挑战

2016 年 10 月 23 日

供职于 LinkedIn 公司流处理架构部门的 Kartik Paramasivam 在今年夏天撰写了两篇文章,解释了LinkedIn 力图在使用 Apache Samza 做数据处理中避免 Lambda 架构的原因及具体做法。

流处理是一种非常有用的技术,解决了如何从数据流中快速获取结果的问题。但是流处理技术并不能满足苛求高一致性和鲁棒性需求的用例的要求。

Lamda 架构是一种结合了批处理和流处理的解决方案,曾被广泛地采用。其基本理念是提供两条独立的数据路径,一条是使用流处理技术的速度层,提供低延迟的结果;另一条是运行任务的批处理层,对批量数据提供精确的结果。由于依赖于多种技术,并合并了两条数据路径的处理结果,所以 Lamda 架构实现很复杂。

LinkedIn 使用 Samza 处理从 Apache Kafka 流出的数据。在文章里描述的其中一个问题是事件的延迟到达。Samza 添加了一个基于 RocksDB 的键值库,实现了对输入事件的长期保存。在事件延迟到达时,由于在本地存储了足够重新计算的信息,架构将重新发送所有的结果给受到影响的计算窗口。鉴于依赖于外部存储(例如 NoSQL)就隐含着通信和序列化中的网络和 CPU 开销,基于 RocksDB 的解决方案经证明是可取的。

另一种流处理架构 Apache Flink 适合于在时间窗口上基于时间戳的计算。时间戳可以是特定于事件的,或是摄入时间戳,用于对乱序的数据流给出一致的结果。Flink 在内存中维护数据,并在接收到水印线(Watermark)事件时触发窗口计算。水印线代表了一个时钟周期,为Flink 提供了时间的概念(可以是特定于事件的)。

流处理中还存在其它的一些问题,例如如何处理由多次交付保证所导致的重复消息等。对于大部分具有内部检查点机制的架构而言,这些问题都已经得到解决。

最后一类流处理问题是以交互的方式对流经系统的数据进行实验的能力。敏捷实验在 Azure Stream Analytics 等商业产品中可用,通常是在批处理系统上使用 SQL 等高层语言执行的。

Julian Hyde 将 Samza SQL 描述为一种试图在 Samza 流处理器中应用 Apache Calcite 的尝试。由于 Samza SQL 目前依然尚未生产就绪,LinkedIn 还是使用 Hadoop 的批处理本能在离线数据上开展迭代测试。一些离线数据是从线上服务数据库中拷贝过来的,即基于 Samza 的流处理器在流处理时所查询的同一数据库。

Flinkn 也在努力实现鲁棒的流SQL 支持。2016 年8 月发布的Flink 1.1 版本支持了流数据上的过滤和合取操作。Flink 也已支持复杂事件处理(Complex Event Processing),用做对事件序列反应方式的一种高层描述。

查看英文原文: Stream Processing and Lambda Architecture Challenges


感谢冬雨对本文的审校。

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

2016 年 10 月 23 日 19:002363
用户头像

发布了 226 篇内容, 共 59.4 次阅读, 收获喜欢 14 次。

关注

评论

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

架构师训练营 第二周 作业

一雄

极客大学架构师训练营 作业 第二周

第二周学习总结

胡江涛

极客大学架构师训练营

架构师训练营第二周作业

W_T

架构师训练营第2周作业

Season

极客大学架构师训练营

架构师训练营第二周课后作业二

不谈

极客大学架构师训练营

程序员的晚餐 | 6 月 15 日 红烧带鱼和清蒸多宝鱼

清远

美食

Flink on Zeppelin (2) - Batch篇

章剑锋_Jeff

大数据 flink 流计算 Zeppelin

架构师训练营 第二周作业

大丁💸💵💴💶🚀🐟

week2 作业

Geek_2e7dd7

做产品少走弯路:你必须掌握的知识

我是IT民工

产品 互联网 方法论 思维方式 知识体系

架构师训练营作业-Week2

wyzwlj

极客大学架构师训练营

学习总结—第二周

于江水

架构是训练营

Spring Aware 你不能不知道的事

CoderLi

Java spring 程序员 源码分析 后端

第02周 开发编程框架 学习总结

Jaye

0613总结

W_T

架构师训练营 第二周 学习总结

一雄

学习 极客大学架构师训练营 第二周

手撕设计原则:依赖倒置

已昏懒人

设计模式 架构师 面向对象设计 面向对象设计原则

架构师训练营 第二周 作业

Poplar

Week2学习总结

wyzwlj

极客大学架构师训练营

依赖倒置原则

李广富

架构师训练营 - 作业 - 第二周

心在飞

极客大学架构师训练营

命题作业—第二周

于江水

极客大学架构师训练营

架构师训练营第二周课后作业一

不谈

极客大学架构师训练营

用 Explain 命令分析 MySQL 的 SQL 执行

程序员历小冰

MySQL explian

ARTS - Week 3

Khirye

ARTS 打卡计划 arts

Class-only Protocols - class or AnyObject

SwiftMic

swift AnyObject

第二周作业

胡江涛

极客大学架构师训练营

week2 学习总结

Geek_2e7dd7

服务治理之轻量级熔断框架:Resilience4j

CoderJ

游戏夜读 | 什么是全力以赴?

game1night

第二周 软件设计原则

WW

腾讯全球数字生态大会苏州峰会

腾讯全球数字生态大会苏州峰会

流处理和Lamda架构中的挑战-InfoQ