【发布时间】:2016-09-11 19:28:39
【问题描述】:
刚开始学习流式处理的时候,我听到了以下两个技术项目:有状态流式处理和无状态流式处理,它们有什么区别?听说storm是无状态的,而storm trident是有状态的,那么在实践中,在哪里使用storm,在哪里使用storm trident?
【问题讨论】:
标签: streaming apache-storm hadoop-streaming
刚开始学习流式处理的时候,我听到了以下两个技术项目:有状态流式处理和无状态流式处理,它们有什么区别?听说storm是无状态的,而storm trident是有状态的,那么在实践中,在哪里使用storm,在哪里使用storm trident?
【问题讨论】:
标签: streaming apache-storm hadoop-streaming
两者之间的区别在于,在非常高的层次上,您必须对它们执行的操作类型。
有些操作是无状态的,也就是说,你一次处理一条记录。 想想一个银行柜员,它一次处理一个客户流。每个客户都是一个新的工作单元,不依赖于前一个。
有状态的操作就像雇用一个新员工。你有很多人来面试,但你是否雇用他们,取决于你的状态,即你有哪些职位空缺。
例如,假设您正在处理网络日志。如果您想知道每秒有多少用户正在查看一个页面,那么您的处理几乎是无状态的:每秒您计算每个页面有多少用户。每一秒,你都不关心前一秒的结果。这是一个无状态操作。
假设您想计算下一秒将拥有多少用户的预测值。您想要平均最后 10 分钟,因此您需要保留最后 10 * 60 秒的队列 - 这是您需要为处理而保留的 状态,并且您需要每秒更新一次, 保持最近 10 分钟的状态。 这当然是一个有状态的操作。 一个更简单的有状态操作只是计算自网站开始以来的页面浏览总数。
这两个操作之间的一个关键区别是,如果流停止并且您重置系统,则必须注意保存状态。 无状态操作没有要保存的任何状态,因此通常更简单。
【讨论】: