streamTask的invoke方法中,會循環去調用task上的每個operator的initializeState方法,在這個方法中,會真正創建除了savepointStream的其他三個對象,
而savepointStream會lazy到做savepoint的時候才創建對象,這個也可以理解,畢竟savepoint不是必須的。
那么,三個對象創建了之后,就可以發揮作用了嗎?不是。KeyedStateBackend和OperatorStateBackend創建之后立刻就會發生作用,因為用戶的
代碼需要獲取和操作state,都會和這兩個對象打交道,而checkpointStream要發揮作用就必須等到系統發出做checkpoint的指示之后,也就是開始
做snapshot之后,這個checkpointStream作為管道將KeyedStateBackend和OperatorStateBackend中的state進行持久化。
內存模型
調用關系:
其中task持有processor對象和operator對象,operator對象持有runtime對象,processor和runtime都持有operator對象,大量的這種對象之間的相互引用關系。