Samza状态管理分析

Samza是依赖Kafka作为通信层的流计算框架。本文主要分析其state的管理。


概述

增量

存储粒度:增量。这里的存储粒度指的是对状态的容错处理,在分布式环境中,保存在本地(内存OR硬盘)的状态随时可能丢失,所以需要把状态定期checkpoint到可靠的存储引擎中,增量还是全量取决于checkpoint的方式。

目前Trident靠HBase等数据库产品帮它做了增量的状态管理,但是当状态量过大时,内存装不下,这时状态的所有操作都只能退化到HBase的操作。

Flink目前虽然提供RocksDb+HDFS的状态容错管理,但是还是全量的checkpoint。

at-least-once

事务保证:at-least-once。由于Samza没有把版本号(数据的批次ID等)和状态结合起来,所以当计算失败时,状态却不能回溯到以前的状态。

Trident和Flink均可保证exactly-once。

状态应用

1.聚合:比如wordcount、uv、pv等,持续变化的值就是需要容错管理的状态。
2.Join:如果需要对两条stream进行join,就需要对这些实时产生的中间结果进行容错处理。
etc..

实现

如果像Trident把状态全部缓存到内存中(等到批次处理完才进行增量checkpoint),有些场景内存却撑不住,比如stream join stream的场景。
这时需要一个无界的存储机制来保存状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值