在开始学习流处理时,我听到了以下两个技术项目:有状态流处理和无状态流处理,它们之间有什么区别?我听说风暴是无国籍的,而风暴三叉戟是有状态的,所以在实践中,在哪里使用风暴以及在哪里使用风暴三叉戟?
答案 0 :(得分:13)
两者之间的区别在于,在非常高的水平上,你必须对它们进行的操作。
某些操作是无状态的,即您一次处理一条记录。 想想一个银行出纳员,它可以一次处理一个客户流。每个客户都是一个新的工作单元,不依赖于之前的工作。
有状态的操作就像雇用一名新员工一样。你有一群人来接受采访,但是如果你雇用他们,取决于你的州,即你已经开放的职位。
例如,假设您正在处理网络日志。如果您想知道有多少用户每秒查看一个页面,那么您的处理几乎无状态:每秒计算每页有多少用户。每一个新的第二个,你不关心前一秒的结果。这是无国籍的行动。
假设你想要计算下一秒你将拥有多少用户的预测。您希望平均最后10分钟,因此您需要保留最后10 * 60秒的队列 - 这是您需要为处理保留的状态,并且您需要每秒更新一次,保持最近10分钟的状态。 这当然是一项有状态的行动。 更简单的有状态操作只是计算自站点开始以来的页面查看总数。
这两个操作之间的一个关键区别是,如果流停止并重置系统,则必须注意保存状态。 无状态操作没有任何保存状态,因此通常更简单。