상태 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이 적용됩니다.
관련 정보 (Related Information)
FAQ
이전에 활성화한 후 TTL을 비활성화할 수 있나요?
예. Flink는 값을 복원하고 TTL 만료 메타데이터는 무시합니다.
이 기능은 RocksDB와 Heap 백엔드에서 지원되나요?
예, RocksDB는 2.1.0부터, Heap은 2.2.0부터 지원하며, ForSt는 아직 추가되지 않았습니다.
TTL 마이그레이션을 완전히 지원하는 Flink 버전은 무엇인가요?
Flink 2.2.0이 필요한 모든 지원이 갖춰진 첫 번째 버전입니다.
savepoint에서 무엇인가 변경해야 하나요?
아니요. 직렬화기가 그 외에는 호환 가능한 경우 마이그레이션은 Flink 내부에서 처리됩니다.