Samza提供对流的容错性处理:Samza保证信息不会丢失,即使你的job崩溃,或者是一台机器down掉了,再或是网络故障,还是其他什么地方出了问题。为了提供这种保障,Samza期望的输入流系统,要能以满足以下要求:
每个分区包含消息在一个固定的顺序的序列。每个消息的偏移量,这表明其在该序列的位置。消息总是每个分区中消耗的顺序。
一个Samza作业可以从任何消息的位置序列开始处理消息。
kafka满足上面得要求,但并不意味着只有kafka。samza可以整合其他的message broker 系统。
我们描述一下SamzaContainer得处理场景,每个task实例将会消费一个输入流系统得一个分区,每个task都会保存每个分区当前处理得offset值。每一次处理一个消息,offset将往前移动一位。
如果SamzaContainer失败,需要重新启动能够恢复到处理失败的地方,为了能够做到这一点,需要SamzaContainer能够保存每个task实例当前处理的offset位置。