Java 호환성
Java 호환성 (Java Compatibility)
이 문서는 Flink가 지원하는 Java 버전과 해당 버전에 적용되는 제약 사항(있는 경우)을 정리합니다. Flink 2.0.0부터 기본 Java 버전은 17이며, Java 11과 Java 21도 지원합니다.
출처: 문서
본문
이 페이지는 Flink가 지원하는 Java 버전과 적용되는 제약 사항(있는 경우)을 나열합니다.
Java 11
Java 11 지원은 1.10.0에서 추가되었습니다.
테스트되지 않은 Flink 기능
다음 Flink 기능은 Java 11로 테스트되지 않았습니다:
- Hive connector
- Hbase 1.x connector
테스트되지 않은 언어 기능
- 모듈화된 사용자 jar는 테스트되지 않았습니다.
Java 17
Flink 2.0.0에서는 기본적으로 Java 17을 사용하며, Flink를 실행할 때 권장하는 Java 버전입니다. 이는 docker 이미지의 기본 버전입니다.
Java Records 지원은 Flink 1.19에서 추가되었습니다 (FLINK-32380). Java 레코드는 POJO 타입으로 처리되며 정규 생성자(canonical constructor)를 통해 직렬화됩니다.
테스트되지 않은 Flink 기능
다음 Flink 기능은 Java 17로 테스트되지 않았습니다:
- Hive connector
- Hbase 1.x connector
Java 21
Java 21에 대한 실험적 지원은 2.0.0에서 추가되었습니다. (FLINK-33163)
테스트되지 않은 Flink 기능
다음 Flink 기능은 Java 21로 테스트되지 않았습니다:
- Hive connector
- Hbase 1.x connector
JDK 모듈화 (JDK modularization)
Java 16부터 Java 애플리케이션은 Project Jigsaw라고도 알려진 JDK 모듈화에 완전히 협조해야 합니다. 이는 JDK 클래스/내부에 대한 접근이 애플리케이션 시작 시 모듈별로 --add-opens/--add-exports JVM 인자 형태로 명시적으로 허용되어야 함을 의미합니다.
Flink는 사용자 정의 함수와 데이터를 (Kryo를 통해) 직렬화할 때 리플렉션을 사용하므로, UDF나 데이터 타입이 JDK 클래스를 사용한다면 이 JDK 클래스에 대한 접근을 허용해야 할 수 있습니다.
이 항목은 env.java.opts.all 옵션을 통해 구성해야 합니다.
Flink 배포판의 기본 구성에서는 이 옵션이 Flink 자체가 Java 17에서 동작하도록 구성되어 있습니다. 구성된 인자 목록은 줄여서는 안 되며, 확장만 가능합니다.
알려진 문제 (Known issues)
- 필수 Kryo 의존성 업그레이드, FLIP-371.
- C2 Compiler 스레드의 SIGSEGV: 초기 Java 17 빌드는 JVM이 갑자기 실패할 수 있는 버그의 영향을 받습니다. 이 문제를 해결하려면 Java 17 설치를 업데이트하세요. 자세한 내용은 JDK-8277529 참고.