토리맘의 한글라이즈 프로젝트 logo 토리맘의 한글라이즈 프로젝트

스프링 클라우드 데이터 플로우 공식 레퍼런스를 한글로 번역한 문서입니다.

전체 목차는 여기에 있습니다.


Docker Compose 설치 가이드에선 docker-compose.yml을 이용해 Data Flow, Skipper, Kafka, MySQL을 설치하는 방법을 설명했다. 이 베이직 설정은 기본으로 제공하는 docker-compose 익스텐션 파일을 사용해 확장할 수 있다. 예를 들어 RabbitMQPostgreSQL을 사용하고 싶거나 Data Flow 모니터링을 활성화하고 싶다면, 원하는 docker-compose 익스텐션 파일과 결합하면 된다:

Linux / OSX Windows
docker-compose -f ./docker-compose.yml \
               -f ./docker-compose-rabbitmq.yml \
               -f ./docker-compose-postgres.yml \
               -f ./docker-compose-influxdb.yml up
docker-compose -f .\docker-compose.yml -f .\docker-compose-rabbitmq.yml -f .\docker-compose-postgres.yml -f .\docker-compose-influxdb.yml up

이어지는 섹션에선 docker-compose.yml 위에 적용할 수 있는 기본 제공 중인 익스텐션 docker-compose 파일들을 자세히 설명한다. docker-compose 파일을 둘 이상 사용하면 정의된 순서대로 적용된다.

목차


Prometheus & Grafana

docker-compose-prometheus.yml 파일은 docker-compose.yml의 디폴트 설정을 확장해서 프로메테우스와 그라파나를 통한 스트림/태스크 모니터링을 활성화한다:

Linux / OSX Windows
wget -O docker-compose-prometheus.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-prometheus.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-prometheus.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-prometheus.yml -o docker-compose-prometheus.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-prometheus.yml up

이 확장 설정은 기본 서비스 외에 서비스 디스커버리 위한 PrometheusPrometheus-RSocket-Proxy를 추가하고, 미리 만들어진 스트림, 태스크 대시보드를 가지고 있는 Grafana를 추가한다.

docker-compose-prometheus.yml 설정에선 아래에 있는 컨테이너 포트를 호스트 시스템에 노출한다:

Host ports Container ports Description
9090 9090 프로메테우스 서버 포트. 이 포트를 통해 http://localhost:9090에 있는 프로메테우스 웹 콘솔에 접근한다.
3000 3000 그라파나 서버 포트. 이 포트를 통해 http://localhost:3000에 있는 그라파나 대시보드에 접근한다.
9096 9096 프로메테우스 RSocket 프록시 (스프링 부트) 서버 포트
7001 7001 프로메테우스 RSocket 프록시 TCP accept 포트. 스트림, 태스크 애플리케이션의 메트릭을 프록시로 리포트할 땐 이 포트를 사용하도록 설정할 수 있다.
8086 8086 프로메테우스 RSocket 프록시 WebSocket 포트. 스트림, 태스크 애플리케이션의 메트릭을 프록시로 리포트할 땐 이 포트를 사용하도록 설정할 수 있다.

docker-compose-prometheus.yml 파일에선 도커 이미지(springcloud/spring-cloud-dataflow-prometheus-local, springcloud/spring-cloud-dataflow-grafana-prometheus)에 설정한 DATAFLOW_VERSION 값과 일치하는 태그가 존재한다고 가정한다.


InfluxDB & Grafana

docker-compose-influxdb.yml 파일은 InfluxDB그라파나를 통한 스트림/태스크 모니터링을 활성화한다. 그라파나는 미리 만들어진 스트림, 태스크 대시보드를 가지고 있다:

Linux / OSX Windows
wget -O docker-compose-influxdb.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-influxdb.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-influxdb.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-influxdb.yml -o docker-compose-influxdb.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-influxdb.yml up

docker-compose-influxdb.yml 설정에선 아래에 있는 컨테이너 포트를 호스트 시스템에 노출한다:

Host ports Container ports Description
8086 8086 Influx DB 서버 포트. InfluxDB에 연결할 땐 http://localhost:8086을 사용해라.
3000 3000 그라파나 서버 포트. 그라파나 대시보드 http://localhost:3000에 접근할 땐 이 포트를 사용해라.

docker-compose-influxdb.yml 파일에선 도커 이미지(springcloud/spring-cloud-dataflow-grafana-influxdb)에 설정한 DATAFLOW_VERSION 값과 일치하는 태그가 존재한다고 가정한다.


Wavefront

docker-compose-wavefront.yml 파일은 Wavefront를 통한 스트림/태스크 모니터링을 활성화하며, 스트림, 태스크 대시보드가 미리 만들어져 있다.

Wavefront는 SaaS 기반 플랫폼으로, 먼저 사용자 계정을 생성하고 이 계정을 사용해 밑에서 설명하는 대로 환경 변수 WAVEFRONT_KEYWAVEFRONT_URI를 설정해야 한다.

Linux / OSX Windows
wget -O docker-compose-wavefront.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-wavefront.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-wavefront.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-wavefront.yml -o docker-compose-wavefront.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-wavefront.yml up

docker-compose-wavefront.yml을 설정할 땐 아래에 있는 환경 변수를 사용할 수 있다:

Variable name Default value Description
WAVEFRONT_KEY (required) Wavefront user API 키
WAVEFRONT_URI https://vmware.wavefront.com Wavefront 엔트리 포인트 URI
WAVEFRONT_SOURCE scdf-docker-compose Data Flow 설치로 들어오는 메트릭을 식별하기 위한 Wavefront의 고유 식별자.

Wavefront의 Browse/Source 메뉴를 통해 WAVEFRONT_SOURCE 소스로부터 들어오는 메트릭을 찾을 수 있다.


Zipkin Server

docker-compose-zipkin.yml을 사용하면 Zipkin Server로 분산 스트림 트레이스를 수집하고 시각화할 수 있다. 배포된 스트리밍 애플리케이션에서 수집한 분산 트레이스를 확인하려면 http://localhost:9411/zipkin에 있는 Zipkin의 UI를 열면 된다.

모든 Spring Cloud Stream 애플리케이션들Spring Cloud Sleuth로 미리 설정돼 있어 메세지 분산 트레이싱을 지원한다. 추적한 정보는 외부 시스템으로 전송되서 latency를 시각화한다. Spring Cloud Sleuth는 Zipkin ServerWavefront Distributed Tracing과 같은 OpenZipkin 호환 시스템을 지원한다.

Zipkin 분산 트레이싱은 기본적론 비활성화돼 있다. 기본 동작을 변경할 땐 spring sleuth 프로퍼티를 사용한다. 예를 들어 docker-compose-zipkin.yaml은 배포된 스트림 애플리케이션들을 위해 SCDF 공통 스트리밍 프로퍼티를 활용해 spring.zipkin.enabled=truespring.zipkin.base-url=http://zipkin-server:9411을 설정한다.

Linux / OSX Windows
wget -O docker-compose-zipkin.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-zipkin.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-zipkin.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-zipkin.yml -o docker-compose-zipkin.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-zipkin.yml up

docker-compose-zipkin.yml 설정에선 아래에 있는 컨테이너 포트를 호스트 시스템에 노출한다:

Host ports Container ports Description
9411 9411 HTTP API와 웹 UI를 위한 Zipkin 서버 수신listen 포트

http://localhost:9411/zipkin에 있는 Zipkin UI를 통해 배포돼 있는 스트리밍 애플리케이션들로부터 수집한 분산 트레이스 정보를 탐색할 수 있다.


Postgres Instead of MySQL

docker-compose-postgres.yml 파일은 Spring Cloud Data Flow와 SKipper 모두 MySQL 대신 PostgreSQL을 사용하도록 설정한다. 기본 mysql 서비스를 비활성화하며, 새로운 postgres 서비스를 추가하고 이 postgres 서비스를 사용하도록 Data Flow와 Skipper 설정을 재정의한다:

Linux / OSX Windows
wget -O docker-compose-postgres.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-postgres.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-postgres.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-postgres.yml -o docker-compose-postgres.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-postgres.yml up

docker-compose-postgres.yml 설정에선 아래에 있는 컨테이너 포트를 호스트 시스템에 노출한다:

Host ports Container ports Description
5432 5432 PostgreSql DB 서버 포트. 로컬 머신에서 DB에 연결할 땐 jdbc:postgresql://localhost:5432/dataflow를 사용해라.

RabbitMQ Instead of Kafka

docker-compose-rabbitmq.yml은 (카프카 대신) RabbitMQ를 메세지 브로커로 설정한다. 기본 kafka, zookeeper 서비스를 비활성화하며, 새로운 rabbitmq 서비스를 추가하고, dataflow-server의 서비스 바인더 설정을 RabbitMQ로 재정의한다 (ex. spring.cloud.dataflow.applicationProperties.stream.spring.rabbitmq.host=rabbitmq). 마지막으로, app-import 서비스를 재정의해 RabbitMQ 앱을 등록한다:

Linux / OSX Windows
wget -O docker-compose-rabbitmq.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-rabbitmq.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-rabbitmq.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-rabbitmq.yml -o docker-compose-rabbitmq.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-rabbitmq.yml up

Debugging

이어지는 섹션에선 DataFlow(또는 Skipper) 서버와, 해당 서버에서 배포한 Stream 애플리케이션들을 디버깅하는 법을 설명한다.

여기서 보여주는 디버그 설정으로 실행이 안 될 땐 localhost 이름이 아닌 로컬 머신의 IP 주소를 사용해라.

Debug Stream Applications

스트림 애플리케이션을 디버깅하려면 스트림을 배포할 때 애플리케이션 배포 프로퍼티(deployer..local.debugPort)를 20000 - 20105 범위에 있는 값으로 설정해라. 배포 UI 패널에서 직접 수행해도 된다. 아래 예시에선 debugPort20075로 설정한다:

scdf-set-app-debug-port

IDE에서 스트림 애플리케이션 프로젝트를 열어보자. 그다음 원격 디버그 설정을 위해 Host:를 로컬 IP 주소로 설정하고 Port:를 위의 배포 프로퍼티에서 사용한 값으로 세팅해라.

scdf-remote-debugging-stream-apps

반드시 localhost가 아닌 IP 주소를 사용해야 한다.

Debug Data Flow Server

docker-compose-debug-dataflow.yml 파일은 Data Flow 서버의 원격 디버깅을 활성화한다. 디버깅을 활성화하려면 다음 명령어를 실행하면 된다:

Linux / OSX Windows
wget -O docker-compose-debug-dataflow.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-debug-dataflow.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-debug-dataflow.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-debug-dataflow.yml -o docker-compose-debug-dataflow.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-debug-dataflow.yml up

dataflow-server 서비스는 디버거가 5005 포트에 붙어 디버깅을 시작할 때까지 기다린다. 아래 스크린샷은 IntelliJ로 원격 디버깅을 설정하는 법을 보여준다. Host:를 로컬 IP 주소로 설정해라. localhost는 도커 컨테이너 내부에서 동작하지 않으므로 사용하면 안 된다.

scdf-remote-debugging

간혹 디버깅하는 동안 로컬에서 spring-cloud-dataflow-server:latest 도커 이미지를 새로 빌드해야 할 때가 있다. 이럴 땐 DataFlow 루트 디렉토리에서 다음 명령어를 실행하면 된다:

./mvnw clean install -DskipTests
./mvnw docker:build -pl spring-cloud-dataflow-server

Debug Skipper Server

Skipper 서버의 원격 디버깅도 마찬가지로 docker-compose-debug-skipper.yml 파일을 사용해 활성화할 수 있다:

Linux / OSX Windows
wget -O docker-compose-debug-skipper.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-debug-skipper.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-debug-skipper.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-debug-skipper.yml -o docker-compose-debug-skipper.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-debug-skipper.yml up

skipper 서비스는 디버거가 6006 포트에 연결될 때까지 기다린다.


Integration Testing

DataFlowIT.java 클래스에 있는 설명을 보면 같은 docker-compose 파일을 재사용해서 DataFlow 통합 테스트와 스모크 테스트를 빌드하는 방법을 알 수 있다.


Multi-platform Support

이 설정은 로컬 Skipper 서버를 원격 플랫폼(쿠버네티스, 클라우드 파운드리같은)에 연결해서 이런 플랫폼들에 스트리밍 데이터 파이프라인을 배포할 수 있도록 해준다. 단, 여기서는 원격 플랫폼에 아파치 카프카(또는 RabbitMQ) 바인더가 미리 준비돼있다는 전제 조건이 있다.

태스크와 배치 애플리케이션은 직접 데이터베이스에 접근해야 한다. 하지만 Data Flow 서버와 Database는 로컬에서 실행되기 때문에 로컬 플랫폼에서만 태스크 애플리케이션을 시작할 수 있다. 또한 Local Deployer는 Scheduler 서비스를 지원하지 않기 때문에 docker-compose 설정에서도 지원하지 않는다.

docker-compose-cf.yml 파일은 Data Flow 런타임 플랫폼으로 원격 클라우드 파운드리 계정을 cf라는 이름으로 추가한다. CF API URL과 액세스 credential을 추가하려면 docker-compose-cf.yml을 수정해야 한다.

wget -O docker-compose-rabbitmq.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-rabbitmq.yml
wget -O docker-compose-cf.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-cf.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-rabbitmq.yml -f ./docker-compose-cf.yml up

CF에선 카프카를 지원하지 않으므로 docker-compose-rabbitmq.yml 파일을 사용해 Rabbit으로 전환도 해야 한다. docker-compose-cf.yml 파일에선 타겟 CF 환경에 rabbit 서비스가 설정돼 있다고 가정한다.

docker-compose-k8s.yml 파일은 Data Flow 런타임 플랫폼으로 원격 Kubernetes 계정을 k8s라는 이름으로 추가한다. 쿠버네티스 마스터 URL과 액세스 credential을 추가하려면 docker-compose-k8s.yml을 수정해야 한다.

wget -O docker-compose-k8s.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/v2.9.1/src/docker-compose/docker-compose-k8s.yml
STREAM_APPS_URI=https://dataflow.spring.io/kafka-docker-latest docker-compose -f ./docker-compose.yml -f ./docker-compose-k8s.yml up

쿠버네티스 환경에선 디폴트 메이븐 기반 앱 스타터를 배포할 수 없다. STREAM_APPS_URI 변수를 설정하면 도커 기반 앱 배포로 전환할 수 있다.

docker-compose-k8s.yml에선 타겟 쿠버네티스 환경에 kafka-broker 서비스가 미리 배포돼 있다고 가정한다. kafka-broker 서비스를 배포하려면 메세지 브로커 선택하기 가이드를 따라해라.


Next :
Manual Installation
도커 없이 수동으로 로컬 장비에 스프링 클라우드 데이터 플로우 설치하기

전체 목차는 여기에 있습니다.

<< >>

TOP