Flink 상태 관리 - State Backends

2440 단어 flink
Flink는 상태 데이터를 저장하는 데 사용할 수 있는 세 가지 상태 백엔드를 제공합니다.
  • MemoryStateBackend
  • FsStateBackend
  • RocksDBStateBackend

  • MemoryStateBackend
    MemoryStateBackend 내부에서state를taskManager의 메모리에 대상으로 저장하고 checkpoint 메커니즘을 통해MemoryStateBackend는state를 스냅샷하여 Jobmanager의 메모리에 저장합니다.
    Memory State Backend는 비동기 스냅샷(asynchronous snapshots)을 사용하도록 설정할 수 있으며, 비동기 스냅샷을 사용하면 파이프가 막히는 것을 피할 수 있으며, 현재는 기본적으로 켜져 있습니다.
    Memory StateBackend의 제한 사항:
  • 각 독립된 상태(state)의 기본 제한 크기는 5MB로 구조 함수를 통해 용량을 증가시킬 수 있다.
  • 상태의 크기는akka의framesize 크기를 초과할 수 없습니다.
  • 집계 상태(aggregate state)는 JobManager의 메모리에 넣어야 합니다.

  • Memory StateBackend 적용 장면:
  • 로컬 디버깅
  • flink 작업 상태 데이터량이 적은 장면
  • FsStateBackend
    FsStateBackend는 파일 시스템 경로를 설정하여 동적 데이터를taskmanger의 메모리에 저장하고 checkpoint 메커니즘을 통해 설정된 파일 시스템이나 디렉터리에 상태 스냅샷을 기록합니다.
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    //fs , file:///, taskmanager 
    val checkPointPath = new Path("hdfs:///flink/checkpoints") 
    val fsStateBackend: StateBackend = new FsStateBackend(checkPointPath)
    env.setStateBackend(fsStateBackend)

    FsStateBackend 적용 시나리오:
  • 큰 상태, 긴 창, 큰 키/value 상태의 작업
  • 전체 고가용성 구성
  • RocksDBStateBackend
    RocksDBStateBackend는 작업 상태를 RocksDB 데이터베이스에 저장합니다.checkpoint를 통해 로크스DB 데이터베이스 전체가 설정된 파일 시스템이나 디렉터리로 복사됩니다
      private val checkpointDataUri = "hdfs:///flink/checkpoints"
      private val tmpDir = "file:///tmp/rocksdb/data/"
      val env = StreamExecutionEnvironment.getExecutionEnvironment
      val fsStateBackend: StateBackend = new FsStateBackend(checkpointDataUri)
      val rocksDBBackend: RocksDBStateBackend = new RocksDBStateBackend(fsStateBackend, TernaryBoolean.TRUE)
      val config = new Configuration()
      //TIMER HEAP( , ) RocksDB( )
     config.setString(RocksDBOptions.TIMER_SERVICE_FACTORY,RocksDBStateBackend.PriorityQueueStateType.ROCKSDB.toString)
      rocksDBBackend.configure(config)
      rocksDBBackend.setDbStoragePath(tmpDir)
      env.setStateBackend(rocksDBBackend.asInstanceOf[StateBackend])

    RocksDBStateBackend 적용 장면:
  • 큰 상태, 긴 창, 큰 키/value 상태의 작업
  • 전체 고가용성 구성
  • Rocks DB State Backend는 작업 상태를task Manger의 로컬 파일 시스템에 저장하기 때문에 상태 수량은 로컬 디스크 용량 제한에 국한된다. Fs State Backend가 작업 상태를 메모리에 저장하는 것과 비교하면 Rocks DB State Backend는 flink 작업이 지속적으로 실행될 때 발생할 수 있는 상태 수량이 폭증하고 메모리가 부족한 상황을 피할 수 있기 때문에 생산 환경에서 사용하기에 적합하다.

    좋은 웹페이지 즐겨찾기