有状态和无状态流处理

use*_*099 4 streaming hadoop-streaming apache-storm

在开始学习流处理时,我听到了以下两个技术项目:有状态流处理和无状态流处理,它们之间有什么区别?我听说风暴是无国籍的,而风暴三叉戟是有状态的,所以在实践中,在哪里使用风暴以及在哪里使用风暴三叉戟?

Rob*_*giu 20

两者之间的区别在于,在非常高的水平上,您必须对它们执行的操作类型.

某些操作是无状态的,即您一次处理一条记录.想想一个银行出纳员,它可以一次处理一个客户流.每个客户都是一个新的工作单元,不依赖于以前的工作.

有状态的操作就像雇用一名新员工一样.你有一群人来面试,但如果你雇用他们,取决于你的,即你开放的职位.

例如,假设您正在处理Web日志.如果您想知道每秒有多少用户在查看某个页面,那么您的处理几乎是无状态的:您每秒计算每页有多少用户.每一个新的第二个,你不关心前一秒的结果.这是无国籍的行动.

假设你想要计算下一秒你将拥有多少用户的预测.您希望平均最后10分钟,因此您需要保留最后10*60秒的队列 - 这是您需要为处理保留的状态,并且您需要每秒更新一次,以保持最新的10分钟分钟的州.这当然是一项有状态的行动.更简单的有状态操作只是计算自站点开始以来的页面查看总数.

这两个操作之间的一个关键区别是,如果流停止并重置系统,则必须注意保存状态.无状态操作没有任何保存状态,因此通常更简单.