class_docstr: Checkpoint storage defines how :class:`StateBackend`'s store their state for fault-tolerance
  in streaming applications. Various implementations store their checkpoints in different fashions
  and have different requirements and availability guarantees.
  
  For example, :class:`JobManagerCheckpointStorage` stores checkpoints in the memory of the
  `JobManager`. It is lightweight and without additional dependencies but is not scalable
  and only supports small state sizes. This checkpoints storage policy is convenient for local
  testing and development.
  
  :class:`FileSystemCheckpointStorage` stores checkpoints in a filesystem. For systems like HDFS
  NFS drives, S3, and GCS, this storage policy supports large state size, in the magnitude of many
  terabytes while providing a highly available foundation for streaming applications. This
  checkpoint storage policy is recommended for most production deployments.
  
  **Raw Bytes Storage**
  
  The `CheckpointStorage` creates services for raw bytes storage.
  
  The raw bytes storage (through the CheckpointStreamFactory) is the fundamental service that
  simply stores bytes in a fault tolerant fashion. This service is used by the JobManager to
  store checkpoint and recovery metadata and is typically also used by the keyed- and operator-
  state backends to store checkpoint state.
  
  **Serializability**
  
  Implementations need to be serializable(`java.io.Serializable`), because they are distributed
  across parallel processes (for distributed execution) together with the streaming application
  code.
  
  Because of that `CheckpointStorage` implementations are meant to be like _factories_ that create
  the proper state stores that provide access to the persistent layer. That way, the storage
  policy can be very lightweight (contain only configurations) which makes it easier to be
  serializable.
  
  **Thread Safety**
  
  Checkpoint storage implementations have to be thread-safe. Multiple threads may be creating
  streams concurrently.
class_docstr_tok: ["Checkpoint","storage","defines","how",":","class",":","`","StateBackend","`","'s","store","their","state","for","fault-tolerance","in","streaming","applications",".","Various","implementations","store","their","checkpoints","in","different","fashions","and","have","different","requirements","and","availability","guarantees",".","For","example",",",":","class",":","`","JobManagerCheckpointStorage","`","stores","checkpoints","in","the","memory","of","the","`","JobManager","`",".","It","is","lightweight","and","without","additional","dependencies","but","is","not","scalable","and","only","supports","small","state","sizes",".","This","checkpoints","storage","policy","is","convenient","for","local","testing","and","development",".",":","class",":","`","FileSystemCheckpointStorage","`","stores","checkpoints","in","a","filesystem",".","For","systems","like","HDFS","NFS","drives",",","S3",",","and","GCS",",","this","storage","policy","supports","large","state","size",",","in","the","magnitude","of","many","terabytes","while","providing","a","highly","available","foundation","for","streaming","applications",".","This","checkpoint","storage","policy","is","recommended","for","most","production","deployments",".","*","*","Raw","Bytes","Storage","*","*","The","`","CheckpointStorage","`","creates","services","for","raw","bytes","storage",".","The","raw","bytes","storage","(","through","the","CheckpointStreamFactory",")","is","the","fundamental","service","that","simply","stores","bytes","in","a","fault","tolerant","fashion",".","This","service","is","used","by","the","JobManager","to","store","checkpoint","and","recovery","metadata","and","is","typically","also","used","by","the","keyed-","and","operator-","state","backends","to","store","checkpoint","state",".","*","*","Serializability","*","*","Implementations","need","to","be","serializable","(","`","java.io.Serializable","`",")",",","because","they","are","distributed","across","parallel","processes","(","for","distributed","execution",")","together","with","the","streaming","application","code",".","Because","of","that","`","CheckpointStorage","`","implementations","are","meant","to","be","like","_factories_","that","create","the","proper","state","stores","that","provide","access","to","the","persistent","layer",".","That","way",",","the","storage","policy","can","be","very","lightweight","(","contain","only","configurations",")","which","makes","it","easier","to","be","serializable",".","*","*","Thread","Safety","*","*","Checkpoint","storage","implementations","have","to","be","thread-safe",".","Multiple","threads","may","be","creating","streams","concurrently","."]
code: def __init__(self, j_checkpoint_storage):
      self._j_checkpoint_storage = j_checkpoint_storage
  
imports: from abc import ABCMeta
  from py4j.java_gateway import get_java_class
  from typing import Optional
  from pyflink.java_gateway import get_gateway
label_desc: Use image node_id 1 to create a new CheckpointStorage object from inherited base classes: object with example: obj = CheckpointStorage(j_checkpoint_storage)