구성
구성 (Configuration)
모든 구성은 conf/ 디렉터리의 Flink 구성 파일에 설정할 수 있습니다(Flink 구성 파일 참고).
구성은 Flink 프로세스가 시작될 때 파싱되고 평가됩니다. 구성 파일의 변경은 관련 프로세스의 재시작을 요구합니다.
기본 구성은 여러분의 기본 Java 설치를 사용합니다. 사용할 Java 런타임을 수동으로 재정의하려면 환경 변수 JAVA_HOME 을 설정하거나 Flink 구성 파일에서 구성 키 env.java.home 을 설정할 수 있습니다. 구성 키 env.java.home 은 구성 파일에서 플랫(flattened) 형식(즉 한 줄의 key-value 형식)으로 지정해야 합니다.
FLINK_CONF_DIR 환경 변수를 정의해 다른 구성 디렉터리 위치를 지정할 수 있습니다. 비 세션(non-session) 배포를 제공하는 리소스 제공자의 경우 이 방식으로 작업별 구성을 지정할 수 있습니다. Flink 배포판에서 conf 디렉터리의 복사본을 만들고 작업별로 설정을 수정하세요. 이는 Docker 또는 standalone Kubernetes 배포에서는 지원되지 않습니다. Docker 기반 배포에서는 FLINK_PROPERTIES 환경 변수를 사용해 구성 값을 전달할 수 있습니다.
세션 클러스터에서 제공된 구성은 실행 매개변수(execution parameters) 를 구성하는 데에만 사용됩니다. 즉 작업이 아닌 기반 클러스터에 영향을 주는 구성 매개변수입니다.
출처: 문서
본문
모든 구성은 conf/ 디렉터리의 Flink 구성 파일에 설정할 수 있습니다. 구성은 Flink 프로세스가 시작될 때 파싱되고 평가됩니다.
Flink 구성 파일
Flink 버전 2.0 부터 Flink 는 표준 YAML 1.2 문법을 따르는 config.yaml 구성 파일만 지원합니다. 이전의 flink-conf.yaml 구성 파일은 더 이상 지원되지 않습니다. 간단한 key-value 쌍만 지원했던 이전 버전과 비교해, 이 업데이트는 사용자에게 더 유연하고 강력한 구성 기능을 제공합니다.
이 섹션은 사용자가 config.yaml 구성 파일로 Flink 클러스터와 작업을 구성하는 방법과 이전 구성을 새 구성 파일로 마이그레이션하는 방법을 이해하도록 돕습니다.
사용법 (Usage)
config.yaml 의 사용법은 다음과 같습니다:
Config Key
- 사용자는 Config Keys 를 중첩 형식으로 구성할 수 있습니다. 예:
restart-strategy:
type: failure-rate
failure-rate:
delay: 1 s
failure-rate-interval: 1 min
max-failures-per-interval: 1
- 사용자는 Config Keys 를 플랫 형식으로도 구성할 수 있습니다. 예:
restart-strategy.type: failure-rate
restart-strategy.failure-rate.delay: 1 s
restart-strategy.failure-rate.failure-rate-interval: 1 min
restart-strategy.failure-rate.max-failures-per-interval: 1
Config Value
config.yaml 구성 파일은 YAML 1.2 core schema 를 따라 값을 구성할 수 있게 합니다. 사용자는 Config Type 에 해당하는 값을 다음 형식으로 구성할 수 있습니다:
| Config Type | 형식 참고 |
|---|---|
| Integer | 정규식: [-+]? [0-9]+ — 예: 100 |
| Long | 정규식: [-+]? [0-9]+ — 예: 100 |
| Float | 정규식: `[-+]? ( . [0-9]+ |
| Double | 정규식: `[-+]? ( . [0-9]+ |
| Boolean | 정규식: `true |
| String | 모든 문자. 참고: 값이 YAML 에 사용되는 특수 문자를 포함하면 이 문자들을 이스케이프하기 위해 단일 또는 이중 인용부호를 사용해야 합니다. |
| Map<String, String> | - Flow Style: 중괄호 "{}" 로 감싸고 쌍은 쉼표 "," 로 구분합니다. 매핑 내에서 키와 값은 콜론 ":" 과 공백으로 구분합니다. — 예: {k1: v1, k2: v2}. - Block Style: 들여쓰기가 데이터의 계층 구조를 나타내고 키와 값은 콜론 ":" 과 공백으로 구분합니다. - Flink Legacy Map Pattern: 쌍은 쉼표 "," 로 구분하고, 매핑 내에서 키와 값은 콜론 ":" 으로 구분합니다. — 예: k1:v1,k2:v2. 참고: 특수 문자를 포함하는 값은 이스케이프를 고려하세요. |
| List | - Flow Style: 대괄호 "[]" 로 감싸고 목록 항목은 쉼표 "," 로 구분합니다. — 예: [a, b, c]. - Block Style: 들여쓰기와 대시 "-" 로 목록 항목을 나타냅니다. - Flink Legacy Map Pattern: 목록 항목은 세미콜론 ";" 으로 구분합니다. — 예: a;b;c. 참고: 특수 문자를 포함하는 값은 이스케이프를 고려하세요. |
| MemorySize | 정규식: `[0-9]+ (b |
| Duration | 정규식: `[0-9]+ (d |
| Enum | Enum 상수 |
또한 사용자는 원래 값을 단일 또는 이중 인용부호로 감싸 모든 Config Types 의 값을 문자열로 구성할 수 있습니다.
flink-conf.yaml 에서 config.yaml 로 마이그레이션
동작 변경 (Behavior Changes)
config.yaml 은 YAML 1.2 문법을 엄격히 따르며 대부분의 경우 flink-conf.yaml 과 호환됩니다. 단, 다음 동작 변경을 제외합니다:
- Null 값:
flink-conf.yaml: 값만 비워두는 것을 지원합니다.config.yaml: 비워두거나 null, Null, NULL,~로 명시적 설정을 지원합니다.
- 주석(Comment):
flink-conf.yaml: 각 줄의 첫 번째#이후의 모든 것이 주석으로 간주됩니다.config.yaml:#앞에 내용과의 공백이 하나 이상 있거나#가 줄의 시작에 있을 때 후속 내용이 주석으로 간주됩니다.
- 문자열의 특수 문자 이스케이프:
flink-conf.yaml: 목록과 맵의 요소만 이스케이프하면 됩니다. 세미콜론 ";" 을 포함하는 목록 요소는 이스케이프가 필요합니다. 쉼표 "," 또는 콜론 ":" 을 포함하는 맵 요소는 이스케이프가 필요합니다.config.yaml: YAML 1.2 사양에 정의된 특수 문자 이스케이프가 필요합니다.
- 중복 키:
flink-conf.yaml: 중복 키를 허용하며 파일에 나타나는 해당 키의 마지막 key-value 쌍을 사용합니다.config.yaml: 중복 키를 허용하지 않으며 구성 로드 시 오류가 보고됩니다.
- 잘못된 구성 처리:
flink-conf.yaml: 잘못된 key-value 쌍은 무시됩니다.config.yaml: 구성 로드 시 오류가 보고됩니다.
마이그레이션 도구
사용자 마이그레이션을 용이하게 하기 위해 Flink 는 마이그레이션 과정을 자동화할 수 있는 구성 파일 마이그레이션 스크립트를 제공합니다. 사용법은 다음과 같습니다:
- 이전 구성 파일
flink-conf.yaml을conf/디렉터리에 넣습니다. $FLINK_HOME/디렉터리에서 다음 명령을 실행합니다:
bin/migrate-config-file.sh
위 명령 실행 후 마이그레이션 스크립트는 conf/ 디렉터리에서 이전 구성 파일 flink-conf.yaml 을 자동으로 읽고 마이그레이션된 결과를 conf/ 디렉터리의 새 구성 파일 config.yaml 에 출력합니다. 레거시 구성 파서의 제한으로 인해 flink-conf.yaml 의 모든 값이 String 타입으로 인식되므로, 생성된 config.yaml 파일의 값도 String 타입이 되어 일부 값이 인용부호로 감싸집니다. 그러나 Flink 는 이후 구성 파싱 중에 ConfigOption 을 사용해 정의된 실제 타입으로 변환합니다.
기본 설정 (Basic Setup)
기본 구성은 변경 없이 단일 노드 Flink 세션 클러스터 시작을 지원합니다. 이 섹션의 옵션은 기본 분산 Flink 설정에 가장 일반적으로 필요한 옵션입니다.
호스트명 / 포트 (Hostnames / Ports)
이 옵션은 standalone 애플리케이션 또는 세션 배포(simple standalone 또는 Kubernetes) 에만 필요합니다.
Flink 를 Yarn 또는 active Kubernetes 연동 과 함께 사용하면 호스트명과 포트가 자동으로 발견됩니다.
rest.address,rest.port: 클라이언트가 Flink 에 연결하는 데 사용합니다. JobManager 가 실행되는 호스트명 또는 JobManager 의 REST 인터페이스 앞에 있는 (Kubernetes) 서비스의 호스트명으로 설정하세요.jobmanager.rpc.address(기본값 "localhost") 및jobmanager.rpc.port(기본값 6123) 구성 항목은 TaskManager 가 JobManager/ResourceManager 에 연결하는 데 사용됩니다. JobManager 가 실행되는 호스트명 또는 JobManager 용 (Kubernetes 내부) 서비스의 호스트명으로 설정하세요. 이 옵션은 리더 선출 메커니즘이 이를 자동으로 발견하는 고가용성(high-availability) 설정 에서는 무시됩니다.
메모리 크기 (Memory Sizes)
기본 메모리 크기는 간단한 스트리밍/배치 애플리케이션을 지원하지만, 더 복잡한 애플리케이션에 좋은 성능을 내기에는 너무 낮습니다.
jobmanager.memory.process.size: JobManager (JobMaster / ResourceManager / Dispatcher) 프로세스의 총 크기.taskmanager.memory.process.size: TaskManager 프로세스의 총 크기.
총 크기는 모든 것을 포함합니다. Flink 는 JVM 의 자체 메모리 요구사항(metaspace 등)을 위해 일부 메모리를 빼고, 나머지를 컴포넌트 간에 자동으로 나누고 구성합니다(JVM Heap, Off-Heap, TaskManager 의 경우 네트워크, 관리 메모리 등).
이 값들은 1536m 또는 2g 같은 메모리 크기로 구성됩니다.
병렬도 (Parallelism)
taskmanager.numberOfTaskSlots: TaskManager 가 제공하는 slot 수 (기본값: 1). 각 slot 은 하나의 task 또는 파이프라인을 처리할 수 있습니다. TaskManager 에 여러 slot 을 두면 특정 고정 오버헤드(JVM, 애플리케이션 라이브러리, 네트워크 연결) 를 병렬 task 또는 파이프라인에 걸쳐 상쇄하는 데 도움이 될 수 있습니다. 자세한 내용은 Task Slots and Resources 개념 섹션을 참고하세요.parallelism.default: 어디에도 병렬도가 지정되지 않을 때 사용되는 기본 병렬도 (기본값: 1).
체크포인팅 (Checkpointing)
체크포인팅은 Flink 작업 또는 애플리케이션 내에서 코드로 직접 구성할 수 있습니다. 이러한 값을 여기 구성에 넣으면 애플리케이션이 아무것도 구성하지 않을 때 기본값으로 정의됩니다.
state.backend.type: 사용할 상태 백엔드. 스냅샷을 찍는 데이터 구조 메커니즘을 정의합니다. 일반적인 값은hashmap,rocksdb또는forst입니다.execution.checkpointing.dir: 체크포인트를 쓸 디렉터리. s3://mybucket/flink-app/checkpoints 나 hdfs://namenode:port/flink/checkpoints 같은 경로 URI를 받습니다.execution.checkpointing.savepoint-dir: savepoint 의 기본 디렉터리.execution.checkpointing.dir과 유사한 경로 URI를 받습니다.execution.checkpointing.interval: 기본 간격 설정. 체크포인팅을 활성화하려면 이 값을 0보다 크게 설정해야 합니다.
Web UI
web.submit.enable: Flink UI 를 통한 작업 업로드 및 시작을 활성화합니다 (기본적으로 true). 비활성화되어도 세션 클러스터는 여전히 REST 요청(HTTP 호출)으로 작업을 수용합니다. 이 플래그는 UI 에서 작업을 업로드하는 기능만 보호합니다.web.cancel.enable: Flink UI 를 통한 작업 취소를 활성화합니다 (기본적으로 true). 비활성화되어도 세션 클러스터는 여전히 REST 요청으로 작업을 취소합니다. 이 플래그는 UI 에서 작업을 취소하는 기능만 보호합니다.web.upload.dir: 업로드된 작업을 저장할 디렉터리.web.submit.enable이 true 일 때만 사용됩니다.web.exception-history-size: 작업에 대해 Flink 가 처리한 가장 최근 실패를 인쇄하는 예외 기록의 크기를 설정합니다.
구성 참조 (Configuration)
Flink의 모든 구성 옵션에 대한 전체 목록은 Flink 구성 참조 문서를 참고하세요. 이 페이지에서 다루는 주요 구성 카테고리는 다음과 같습니다:
- Execution options: 실행 동작과 관련된 옵션.
- Memory options: JobManager 및 TaskManager 메모리 설정.
- Checkpointing and state backends options: 체크포인팅과 상태 백엔드.
- Network options: 네트워크 및 셔플 관련 설정.
- Fault tolerance options: 재시작 전략.
- High availability options: 고가용성.
- Security options: 인증(Auth), SSL 등.
- Pluggable file systems options: 플러그 가능한 파일 시스템.
- Resource provider options: YARN, Kubernetes, standalone.
- Metrics options: 메트릭과 리포터.
- Web frontend options: 웹 UI 와 REST API.
- State & memory configuration: 상태와 관리 메모리.
- Kerberos / external systems: 외부 시스템 인증.
참고:
nightlies.apache.org의 Flink 2.3 문서에서 이 구성 페이지는 매우 방대한 구성 옵션 참조 테이블을 포함합니다. 원본 페이지의 전체 옵션 목록은 위 링크를 참고하십시오. 각 옵션의 키(ConfigOption), 기본값, 타입, 설명이 구조화된 표로 제공됩니다.