Flink
Flink Doris Connector를 사용하면 Flink가 생성한 데이터(Kafka나 MySQL에서 Flink가 읽어 온 데이터 등)를 Doris로 실시간 적재할 수 있습니다. 실시간 데이터 수집 및 스트리밍 ETL 시나리오에 적합합니다.
활용 시나리오
| 시나리오 | 설명 |
|---|---|
| 실시간 데이터 수집 | Kafka나 Pulsar 같은 메시지 큐의 데이터를 Doris에 실시간으로 기록합니다 |
| 데이터베이스 동기화 | Flink CDC를 통해 MySQL이나 Oracle 같은 데이터베이스의 데이터를 Doris로 동기화합니다 |
| 스트리밍 ETL | Flink로 실시간 연산을 수행하고 결과를 Doris에 기록합니다 |
제약 사항
- 미리 배포한 Flink 클러스터가 필요합니다.
- Flink에 해당 버전의 Flink Doris Connector를 배포해야 합니다.
절차
Flink를 사용한 데이터 적재의 전체 지침은 Flink-Doris-Connector를 참조하세요. 다음 최소 예제에서는 Flink를 통해 데이터를 빠르게 적재하는 방법을 보여 줍니다.
전체 작업 흐름은 다음 세 단계로 이루어집니다:
- Doris에 대상 테이블 생성
- Flink에서 FlinkSQL로 데이터 쓰기
- Doris에서 데이터가 정상적으로 적재되었는지 확인
1단계: Doris에 테이블 생성
Flink에서 데이터를 받을 대상 테이블 students를 Doris에 생성합니다:
CREATE TABLE `students` (
`id` INT NULL,
`name` VARCHAR(256) NULL,
`age` INT NULL
) ENGINE=OLAP
UNIQUE KEY(`id`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
2단계: Flink로 데이터 적재
bin/sql-client.sh를 실행해 FlinkSQL 콘솔을 열고, 다음 구문을 실행해 sink 테이블을 생성하고 데이터를 기록합니다:
CREATE TABLE student_sink (
id INT,
name STRING,
age INT
)
WITH (
'connector' = 'doris',
'fenodes' = '10.16.10.6:28737',
'table.identifier' = 'test.students',
'username' = 'root',
'password' = '',
'sink.label-prefix' = 'doris_label'
);
INSERT INTO student_sink values(1,'zhangsan',123)
주요 매개변수는 다음과 같습니다:
| 매개변수 | 설명 |
|---|---|
connector | doris로 고정되며, Flink Doris Connector를 사용함을 나타냅니다 |
fenodes | Doris FE의 HTTP 주소이며, 형식은 host:http_port입니다 |
table.identifier | 대상 테이블의 식별자이며, 형식은 database.table입니다 |
username | Doris 로그인 사용자 이름 |
password | Doris 로그인 비밀번호 |
sink.label-prefix | Stream Load 데이터 적재 작업의 Label 접두사입니다. 전역적으로 고유해야 합니다 |
3단계: 적재된 데이터 확인
Doris에서 대상 테이블을 쿼리하여 데이터가 정상적으로 적재되었는지 확인합니다:
select * from test.students;
+------+----------+------+
| id | name | age |
+------+----------+------+
| 1 | zhangsan | 123 |
+------+----------+------+
자주 묻는 질문
Q1: Flink Doris Connector는 어떤 데이터 소스를 지원하나요?
이론적으로 Flink가 지원하는 모든 데이터 소스(Kafka, MySQL CDC, 파일 시스템, 메시지 큐 등)를 업스트림 소스로 사용하여 Flink에서 처리한 뒤 Doris에 기록할 수 있습니다.
Q2: sink.label-prefix는 왜 고유해야 하나요?
Flink Doris Connector는 Doris Stream Load를 기반으로 데이터를 적재합니다. Exactly-Once 처리를 보장하려면 각 트랜잭션에 고유한 Label이 필요합니다. Label이 중복되면 데이터 적재 시 충돌이 발생합니다.
Q3: fenodes에는 어떤 포트를 사용해야 하나요?
fenodes에는 Doris FE의 HTTP 포트(기본값 8030)를 지정해야 하며, MySQL 프로토콜 포트(기본값 9030)를 지정하면 안 됩니다.
Q4: MySQL이나 Oracle 같은 데이터베이스의 데이터를 Doris로 동기화하려면 어떻게 해야 하나요?
Flink CDC와 함께 사용하면 됩니다. 자세한 내용은 Flink-Doris-Connector 문서를 참조하세요.