2016-05-16 148 views
2

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

回答

6

两者之间的差异在很高的级别上,您必须对它们执行的操作类型。

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

有状态的操作就像是雇用一名新员工。你有一群人来接受采访,但是如果你雇用他们,取决于你的状态,也就是说你打开了什么职位。

例如,假设您正在处理网络日志。如果您想知道每秒有多少用户正在查看网页,则您的处理为几乎为无状态:每秒计算每页有多少用户。每一秒钟,你都不在乎前一秒的结果。这是无国籍的行动。

让我们来说说,而不是你想要计算的下一秒将有多少用户的预测。您希望平均过去10分钟,因此您需要保留最后10 * 60秒的队列 - 这就是您需要保留以供处理的状态,并且您需要每秒更新一次,以保持最最近10分钟的状态。 这当然是有状态的操作。 更简单的有状态操作只是计算自该网站开始以来的页面浏览总数。

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