구성

구성 (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 버전 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.yamlconf/ 디렉터리에 넣습니다.
  • $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/checkpointshdfs://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), 기본값, 타입, 설명이 구조화된 표로 제공됩니다.

더 알아보기 (Learn more)