상태 TTL 마이그레이션 호환성

상태 TTL 마이그레이션 호환성 (State TTL Migration Compatibility)

Apache Flink 2.2.0부터 기존 상태에 대해 State Time-to-Live (TTL) 을 원활하게 활성화하거나 비활성화할 수 있습니다. 이 개선으로 TTL 구성 변경 시 복원 중 StateMigrationException이 발생하던 기존 제한이 제거되었습니다.

출처: 문서

본문

Apache Flink 2.2.0부터 기존 상태에 대해 State Time-to-Live (TTL) 을 원활하게 활성화하거나 비활성화할 수 있습니다. 이 개선으로 TTL 구성 변경이 복원 중 StateMigrationException을 일으킬 수 있던 기존 제한이 제거되었습니다.

버전 개요 (Version Overview)

Flink 버전 변경 사항
2.0.0 TTL/non-TTL 직렬화기 호환성을 지원하는 TtlAwareSerializer 도입
2.1.0 RocksDBKeyedStateBackend에 대한 TTL 마이그레이션 지원 추가
2.2.0 HeapKeyedStateBackend에 대한 TTL 마이그레이션 지원 추가

모든 주요 상태 백엔드에 대한 전체 TTL 상태 마이그레이션 지원은 Flink 2.2.0부터 사용할 수 있습니다.

동기 (Motivation)

이전 Flink 버전에서는 StateDescriptor에서 TTL을 켜거나 끄면 비호환성 오류가 발생했습니다. 이는 TTL이 활성화된 상태가 non-TTL 상태와 다른 직렬화 형식을 사용했기 때문입니다.

호환성 동작 (Compatibility Behavior)

2.0.0에서 2.2.0에 걸친 변경 사항으로 인해:

  • Flink는 이제 TTL 없이 생성된 상태를 TTL이 활성화된 설명자로 복원할 수 있습니다.
  • Flink는 TTL이 있는 상태를 TTL이 활성화되지 않은 설명자로도 복원할 수 있습니다.

직렬화기와 상태 백엔드는 TTL 메타데이터의 존재 여부를 투명하게 처리합니다.

지원되는 마이그레이션 시나리오 (Supported Migration Scenarios)

마이그레이션 유형 사용 가능 시점 동작
Non-TTL 상태 → TTL 활성 설명자 2.1.0 (RocksDB), 2.2.0 (Heap) 이전 상태가 만료되지 않은 상태로 복원됩니다. TTL은 새 업데이트/접근에 적용됩니다.
TTL 상태 → Non-TTL 설명자 2.1.0 (RocksDB), 2.2.0 (Heap) TTL 메타데이터는 무시됩니다. 상태는 영구적으로 보이게 됩니다.

제한 사항 (Limitations)

  • TTL 파라미터(예: 만료 시간, 업데이트 동작) 변경은 항상 호환되지 않을 수 있습니다. 직렬화기 마이그레이션이 필요할 수 있습니다.
  • TTL은 소급 적용되지 않습니다. non-TTL 상태에서 복원된 기존 항목은 다음 접근 또는 업데이트 후에만 만료됩니다.
  • 이 호환성은 상태 직렬화기에 대한 다른 비호환 변경이 없다고 가정합니다.

예시 (Example)

ValueStateDescriptor<String> descriptor = new ValueStateDescriptor<>("user-state", String.class);
descriptor.enableTimeToLive(StateTtlConfig.newBuilder(Time.hours(1)).build());

이 설명자가 TTL이 없는 기존 설명자를 대체한다면, Flink 2.2.0+에서 상태가 성공적으로 복원되고 이후 TTL이 적용됩니다.

FAQ

이전에 활성화한 후 TTL을 비활성화할 수 있나요?

예. Flink는 값을 복원하고 TTL 만료 메타데이터는 무시합니다.

이 기능은 RocksDB와 Heap 백엔드에서 지원되나요?

예, RocksDB는 2.1.0부터, Heap은 2.2.0부터 지원하며, ForSt는 아직 추가되지 않았습니다.

TTL 마이그레이션을 완전히 지원하는 Flink 버전은 무엇인가요?

Flink 2.2.0이 필요한 모든 지원이 갖춰진 첫 번째 버전입니다.

savepoint에서 무엇인가 변경해야 하나요?

아니요. 직렬화기가 그 외에는 호환 가능한 경우 마이그레이션은 Flink 내부에서 처리됩니다.

더 알아보기 (Learn more)