GMTC全球大前端技术大会聚焦前端、移动、AI应用等领域15个热门专题方向,购票立减¥960 了解详情
写点什么

Samza 的应用场景、优势、新特性与未来规划

2016 年 10 月 30 日

Samza 是 LinkedIn 开源的一款流处理器,本文介绍了 Samza 在 LinkedIn 公司的应用情况,Samza 在流处理方面的优势、新特性以及下一步的规划

LinkedIn 使用 Samza 提升实时用户体验

  • 中央流量控制:在 LinkedIn,发送给用户的所有邮件都会经由中央 Email 分发 Samza 任务处理,该任务会根据特定的策略和窗口标准将同一用户的所有邮件进行聚合,最终向用户发送一个汇总的 Email,而不是将每个应用程序的 Email 单独发送给用户。
  • 广告关联:使用 Samza 计算广告点击率(CTR),通过 Samza 连接广告点击事件流和广告展现事件流,并聚合一些其他维度的数据来计算点击率。
  • 新闻递送:使用 Samza 连接包含“用户查看事件”的事件流和包含所有“新闻条目”的事件流从而判断为每个用户推送新闻的推送质量。该系统每天会处理数十亿事件。
  • 标准化和关联管道:基于 Samza 构建标准化平台,当用户在 LinkedIn 网站上修改职称、公司名称、地理位置等信息时,该管道能使用机器学习模型和关联规则快速解析所有同义词,将名称不同但含义相同的词语关联到一起。
  • ** 监控 A/B 测试期间网站的速度:** 实时监控 A/B 测试期间的各项指标,观察测试时间窗口内各指标对网站速度的影响,并对发现的异常进行警报。
  • 作为转换管道:使用 Samza 进行模式转换和聚合,生成事件并发送到 Kafka 实时事件输入流,实现与已有的 Graph 引擎和 Pinot 分析数据库等系统的集成。
  • 调用图:用户访问 LinkedIn 的过程中会产生很多服务调用事件,这些数据会被发送到 Kafka,之后 Samza 会基于唯一的“TreeID”聚合这些数据并生成网站健康报告。
  • 安全:通过 Samza 分析事件流,实时发现安全隐患、生成警报并执行防护措施。

Samza 的主要优势

  • 模型非常适合构建高性能有状态的应用程序
    大部分有状态的事件处理应用要么需要从远程数据库中读取数据,要么需要在应用内部维护状态,但是这些方式会有 I/O 或者 CPU 瓶颈。而 Samza 对本地集成数据库有良好的支持,可以在事件处理器中集成 RocksDB,从而将数据存储在本地,所有的数据获取操作都在本地完成,十分高效。
  • 将应用程序逻辑与底层的消息传输解耦
    Samza 支持可插拔的消息源(消费者)和蓄水池(生产者),用户可以根据自己的需要将 Kafka、ZeroMQ 等事件源直接与 Samza 结合到一起使用, 不需要预先将来自于不同事件源的数据汇聚到统一的消息系统进行标准化处理。

Samza 的新特性

  • 宿主亲和(Affinity)和状态重用
    启动任务时,Samza 会将主机和容器之间的映射关系存储到“协调流”中;关闭任务时,Samza 会将该任务的所有状态保存到 RocksDB 和偏移文件中;再次启动任务时,YARN 会按照映射关系将容器分配到它之前运行的那一台机器上,并恢复之前的状态数据继续运行。
  • 广播流
    不需要重启 Samza 就能通过修改“配置参数”动态改变整个应用程序的行为。
  • 协调流
    之前任务配置是以环境变量的形式通过命令行传递的,这种方式变量的个数有限制。新版本增加了一个名为“协调流”的集中持久流,用户可以将配置和相关系统信息存储到该流中,然后通过它来修改任务的动态配置。
  • RocksDB TTL
    可以让 Samza 状态存储中的老旧数据自动过期。
  • 为 HDFS 和 ElasticSearch 提供了新的系统生产者
    集成 HDFS 生产者 ElasticSearch 生产者 ,能够将应用程序的输出直接写入到 HDFS 和 ElasticSerarch。
  • Samza 框架无缝升级
    不再需要将 Samza 和应用程序一起打包,只需要将 Samza 二进制包预装到集群,应用程序会自动加载预装到集群中的 Samza。
  • 启动和停止能力
    提供了一个可以启动或者停止单个 Samza 任务的 REST API。
  • 通过在 Samza 任务中为容器指定一组静态的分区分配,摆脱了对 YARN 的依赖。
    不需要任何 YARN 依赖就能让 Samza 应用程序运行在 AWS EC2 等实例上。
    下一步计划
  • Samza 即类库
    解耦协调逻辑和 YARN 托管逻辑,使 Samza 能够支持 Mesos 、Kubernetes 等其他的集群管理系统,以及 AWS EC2 Microsoft Azure Compute Google Compute 等无集群管理器的云计算平台。虽然静态分区分配特性已经实现了部分功能,但是安装配置依然非常复杂,未来将进一步优化。
  • 进程支持并行执行
    在 Samza 中,每个应用程序运行在独立的容器(进程)中,每个容器单线程执行,这种方式内存利用率低。为了让 IO 操作并行执行,需要分配大量容器,且容器间的数据无法共享,为了解决这一问题,Samza 将增加并行执行特性。
  • 支持 DAG (有向无环图)
    简化 DAG 的表达方式,简化多阶段事件处理管道的配置和创建,使之易于部署、监控和升级。
  • 支持 Window 和 Join 操作符
    支持 Window 和 Join 操作符,让 Samza 应用程序在事件延迟到达的情况下也能产生精确的结果。

感谢杜小芳对本文的审校。

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

2016 年 10 月 30 日 19:001788
用户头像

发布了 321 篇内容, 共 103.6 次阅读, 收获喜欢 8 次。

关注

评论

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

维基百科技术架构演进分析

andy

Nebula Graph 在微众银行数据治理业务的实践

Nebula Graph

数据治理 图数据库 图数据库实战

阿里技术官神作!大厂亿级流量性能调优学习手册,堪称保姆级教学

Crud的程序员

Java 架构 调优

产品经理训练营第二周作业

产品经理训练营

第三期(2020-2021)传统行业云原生技术落地调研

York

灵雀云 云原生

区块链技术发展现状

CECBC区块链专委会

区块链

作业

Eva

产品经理课程-第二周

novaln🍉

MapReduce练习案例2 - 自定义排序

小马哥

大数据 hadoop mapreduce 七日更

第二周作业

大熊猫

“区块链+政务”深度融合 开启智慧城市政务新时代

CECBC区块链专委会

大数据

《程序员修炼之道》- 务实的哲学(2)

石云升

读书笔记 28天写作 程序员修炼之道 程序员的务实 软件的熵

如何做好一场技术分享,100%纯干货输出

架构精进之路

技术分享 七日更 28天写作

滴普技术荟-云原生基座OpenKube开放容器实践(三):理解linux虚拟网络设备bridge

滴普科技2048实验室

惊艳全网!阿里人开源了K8s进阶宝典笔记,从理论到实践!

996小迁

Java 编程 架构 面试 k8s

追根溯源的产品思维

产品经理训练营

Flink 助力美团数仓增量生产

Apache Flink

flink 流计算

产品0期-第二周作业

曾烧麦

产品经理训练营

产品经理训练营 Week02

柚子君~

极客大学产品经理训练营

MapReduce练习案例3 - 自定义分区

小马哥

大数据 hadoop mapreduce 七日更

已膜拜!GitHub大佬的微服务资源库太强了,每份学习手册都优质详细

Crud的程序员

Java spring 架构 微服务

作业二、作业三

清醒梦境

滴普技术荟-云原生基座OpenKube开放容器实践(四):linux模拟pod并配置上外网

滴普科技2048实验室

作业 - 第二周

eva

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

云流

Java 编程 面试 计算机

云原生基座OpenKube日志系统介绍

滴普科技2048实验室

Hadoop之HDFS 内部机制知多少?

hanke

大数据 hadoop hdfs 开源 数据存储

第三周作业 利益相关方排序

Eva

玩遍博客网站,我整理了全套的建站技术栈

老魚

程序员 博客 网站搭建 建站

中国将启动国家区块链平台

CECBC区块链专委会

区块链

产品经理训练营-作业二

胡小湖

大数据技术升级脉络及认知陷阱

大数据技术升级脉络及认知陷阱

Samza的应用场景、优势、新特性与未来规划-InfoQ