低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

流处理和 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:002419
用户头像

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

关注

评论

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

区块链的前世今生(1)

抗哥

第2周总结-架构中的设计模式

潘涛

架构师训练营 4 期

自下而上的问题清单

将军-技术演讲教练

28天写作

记一次JVM OOM 实战优化

AI乔治

Java 架构 JVM OOM

序言 基层管理者技能修炼的九把刀

一笑

管理 28天写作

大作业一

fmouse

架构师训练营第 1 期

28天带你玩转Kubernetes--第一天(课程介绍)

Java全栈封神

Kubernetes 云原生 k8s入门 28天写作 k8s教程

我能加入写作训练营,一切都因为...

李忠良

个人成长 驱动力量 28天写作

我们为什么要学习Springboot?

武哥聊编程

Java springboot SpringBoot 2 28天写作

三只猫

小心!你可能搞了个假的头脑风暴!

Justin

团队协作 28天写作 头脑风暴 群体迷思 创造性思维

区块链挖矿系统APP软件开发

开發I852946OIIO

系统开发

一致性Hash算法

andy

SafePoint 与 Stop The World 全解(基于OpenJDK 11版本)

AI乔治

Java 架构 jdk JVM

HDFS SHELL详解(1)

罗小龙

hadoop 28天写作 hdfs shell

学创业,读毛选 Jan 9, 2021

王泰

28天写作 读毛选,学创业

单向链表合并实战

andy

CSS10 - 盒子模型&常用无序列表样式

桃夭十一里

html/css

期末大作业(一)

TheSRE

视频号发展简史&第一天数据 | 视频号28天(02)

赵新龙

28天写作

Flink 自定义Avro序列化(Source/Sink)到kafka中

大数据老哥

大数据 flink hadoop

关系中的密码:麻烦

熊斌

个人成长 28天写作 亲密关系

在 win 10 上安装 Elasticsearch 7.10.1

escray

elasticsearch elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

RocketMQ学习笔记

大刘

RocketMQ MQ 消息队列

kill -9 导致 kafka 重启失败的惨痛经历!

AI乔治

Java kafka 架构

第2周课后练习-OOD的五大原则

潘涛

架构师训练营 4 期

架构师训练营第 1 期 - 大作业1

Anyou Liu

架构师训练营第 1 期

生产环境全链路压测建设历程 24:FAQ 5、6负载均衡、如何不影响正常业务?

数列科技杨德华

28天写作

架构师训练营大作业(一)

曾彪彪

「架构师训练营第 1 期」

架构师训练营大作业(二)

曾彪彪

「架构师训练营第 1 期」

解读《Java开发手册(泰山版)》- 会当凌绝顶,一览众山小

xcbeyond

Java Java开发手册 28天写作

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

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