요구 사항
- Java 11 이상(Flink 1.17+) 또는 17 이상(Flink 2.0+)
- Apache Flink 1.17+
Flink 버전 호환성 매트릭스
이 커넥터는 Flink 1.17.2보다 이전 버전에서는 테스트되지 않았습니다.
설치 및 설정
의존성으로 추가하기
Flink 2.0+용
- Maven
- Gradle
- SBT
Flink 1.17 이상용
- Maven
- Gradle
- SBT
바이너리 다운로드
flink_version은2.0.0또는1.17중 하나입니다stable_version은 안정 artifact 릴리스 버전입니다
DataStream API 사용
스니펫
- Java
빠른 시작 예시
DataStream API 연결 옵션
ClickHouse 클라이언트 옵션
options와 serverSettings는 Map<String, String> 형태로 클라이언트에 전달해야 합니다. 둘 중 어느 하나에 빈 맵을 지정하면 각각 클라이언트 또는 서버의 기본값이 사용됩니다.
사용 가능한 모든 Java 클라이언트 옵션은 ClientConfigProperties.java 및 이 문서 페이지에 나와 있습니다.사용 가능한 모든 서버 세션 설정은 이 문서 페이지에 나와 있습니다.
- Java
싱크 옵션
AsyncSinkBase에서 직접 제공됩니다:
지원되는 데이터 타입
Flink에서 ClickHouse로 데이터 삽입하기
참고:
- 날짜 연산을 수행할 때는
ZoneId를 반드시 지정해야 합니다. - Decimal 연산을 수행할 때는 precision 및 scale을 반드시 지정해야 합니다.
- ClickHouse가 Java
String을 JSON으로 파싱할 수 있도록 하려면ClickHouseClientConfig에서enableJsonSupportAsString을 활성화해야 합니다. - 커넥터는 입력 DataStream의 요소를 ClickHouse 페이로드에 매핑하기 위해
ElementConvertor가 필요합니다. 이를 위해 커넥터는ClickHouseConvertor와POJOConvertor를 제공하며, 위의DataWriter직렬화 메서드를 사용해 이 매핑을 구현할 수 있습니다.
지원되는 입력 형식
setClickHouseFormat 함수를 사용하세요. 예를 들어 다음과 같습니다:
기본적으로 커넥터는
ClickHouseClientConfig에서 setSupportDefault를 각각 true 또는 false로 명시적으로 설정하면 RowBinaryWithDefaults 또는 RowBinary를 사용합니다.메트릭
제한 사항
- 현재 이 싱크는 최소 1회 전달 보장을 제공합니다. 정확히 한 번 처리 의미 체계 지원 작업은 여기에서 추적되고 있습니다.
- 이 싱크는 아직 처리할 수 없는 레코드를 버퍼링하기 위한 데드 레터 큐(DLQ)를 지원하지 않습니다. 그때까지는 커넥터가 실패한 레코드를 다시 삽입하려고 시도하며, 끝내 성공하지 못하면 해당 레코드를 버립니다. 이 기능은 여기에서 추적되고 있습니다.
- 이 싱크는 아직 Flink의 Table API 또는 Flink SQL을 통해 생성하는 기능을 지원하지 않습니다. 이 기능은 여기에서 추적되고 있습니다.
ClickHouse 버전 호환성 및 보안
- 커넥터는 일일 CI 워크플로를 통해 latest와 head를 포함한 여러 최신 ClickHouse 버전을 대상으로 테스트됩니다. 테스트 대상 버전은 새로운 ClickHouse 릴리스가 활성화되면 주기적으로 업데이트됩니다. 커넥터가 매일 어떤 버전을 대상으로 테스트하는지는 여기에서 확인할 수 있습니다.
- 알려진 보안 취약점과 취약점 보고 방법은 ClickHouse 보안 정책을 참조하십시오.
- 보안 수정과 새로운 개선 사항을 놓치지 않도록 커넥터를 계속 업그레이드할 것을 권장합니다.
- 마이그레이션에 문제가 있으면 GitHub issue를 등록해 주십시오. 확인 후 응답하겠습니다.
고급 및 권장 사용법
- 최적의 성능을 위해 DataStream 요소 타입이 Generic 타입이 아니도록 하십시오. 자세한 내용은 Flink의 타입 구분을 참조하십시오. Generic이 아닌 요소를 사용하면 Kryo로 인한 serialization 오버헤드를 줄일 수 있어 ClickHouse로의 처리량이 향상됩니다.
maxBatchSize는 최소 1000, 이상적으로는 10,000~100,000으로 설정하는 것을 권장합니다. 자세한 내용은 대량 삽입 가이드를 참조하십시오.- OLTP 스타일의 중복 제거 또는 ClickHouse 업서트를 수행하려면 이 문서 페이지를 참조하십시오. 참고: 이는 재시도 시 발생하는 배치 중복 제거와 혼동해서는 안 됩니다.
문제 해결
CANNOT_READ_ALL_DATA
낮은 처리량
numRequestSubmitted 및 actualRecordsPerBatch 메트릭을 모니터링하면 배치 크기(maxBatchSize)와 플러시 빈도를 어떻게 조정할지 판단하는 데 도움이 됩니다. 또한 배치 크기 권장 사항은 고급 및 권장 사용법을 참조하십시오.
ClickHouse 테이블에서 행이 누락됩니다
ClickHouseClientConfig.setNumberOfRetries()로 설정 가능). 참고: 기본적으로 커넥터는 배치를 폐기하기 전에 최대 3번까지 다시 삽입을 시도합니다.
해결 방법: 근본 원인을 파악하려면 TaskManager 로그 및/또는 stack trace를 확인하십시오.