HTTP Connector는 Confluent Enterprise License에 따라 배포됩니다.
빠른 시작 절차
1. 연결 정보 수집
ClickHouse Cloud 서비스의 연결 정보는 ClickHouse Cloud 콘솔에서 확인할 수 있습니다.
서비스를 선택한 다음 Connect를 클릭하십시오.
HTTPS를 선택하십시오. 연결 정보가 예시
curl 명령으로 표시됩니다.
자가 관리형 ClickHouse를 사용하는 경우 연결 정보는 ClickHouse 관리자가 설정합니다.
2. Kafka Connect와 HTTP Sink 커넥터 실행
- 자가 관리형: Confluent 패키지를 다운로드하여 로컬에 설치합니다. 커넥터 설치는 여기에 문서화된 설치 지침을 따르십시오. confluent-hub 설치 방법을 사용하는 경우 로컬 설정 파일이 업데이트됩니다.
- Confluent Cloud: Kafka 호스팅에 Confluent Cloud를 사용하는 경우 HTTP Sink의 완전 관리형 버전을 사용할 수 있습니다. 이 경우 ClickHouse 환경은 Confluent Cloud에서 액세스할 수 있어야 합니다.
다음 예시는 Confluent Cloud를 기준으로 합니다.
3. ClickHouse에 대상 테이블 생성
4. HTTP Sink 구성
HTTP Sink 커넥터를 구성합니다:
- 생성한 토픽 이름을 입력합니다
- 인증
HTTP Url-INSERT쿼리가 지정된 ClickHouse Cloud URL<protocol>://<clickhouse_host>:<clickhouse_port>?query=INSERT%20INTO%20<database>.<table>%20FORMAT%20JSONEachRow. 참고: 쿼리는 인코딩해야 합니다.Endpoint Authentication type- BASICAuth username- ClickHouse 사용자 이름Auth password- ClickHouse 비밀번호
이 HTTP Url은 오류가 발생하기 쉽습니다. 문제를 방지하려면 이스케이프 처리를 정확히 하십시오.
- 구성
Input Kafka record value format소스 데이터에 따라 다르지만, 대부분의 경우 JSON 또는 Avro를 사용합니다. 아래 설정에서는JSON을 가정합니다.advanced configurations섹션에서:HTTP Request Method- POST로 설정합니다Request Body Format- jsonBatch batch size- ClickHouse 권장 사항에 따라 최소 1000으로 설정합니다.Batch json as array- trueRetry on HTTP codes- 400-500으로 설정하되 필요에 따라 조정하십시오. 예를 들어 ClickHouse 앞단에 HTTP 프록시가 있는 경우 달라질 수 있습니다.Maximum Reties- 기본값(10)이 적절하지만, 재시도 안정성을 높이려면 조정해도 됩니다.
5. 연결 테스트
그리고 생성한 메시지가 ClickHouse 인스턴스에 기록되었는지 확인하세요.
문제 해결
HTTP Sink가 메시지를 배칭하지 않는 경우
Kafka header 값이 서로 다른 메시지가 포함된 경우 HTTP Sink 커넥터는 요청을 배칭하지 않습니다.
- Kafka 레코드의 key가 동일한지 확인하십시오.
- HTTP API URL에 매개변수를 추가하면 각 레코드마다 고유한 URL이 생성될 수 있습니다. 따라서 추가 URL 매개변수를 사용하면 배칭이 비활성화됩니다.
400 잘못된 요청
CANNOT_PARSE_QUOTED_STRING
String 컬럼에 삽입할 때 HTTP Sink가 다음 메시지와 함께 실패하는 경우:
input_format_json_read_objects_as_strings=1 설정을 인코딩된 문자열 SETTINGS%20input_format_json_read_objects_as_strings%3D1로 지정하십시오
GitHub 데이터셋 로드(선택 사항)
github topic이 있다고 가정하고, Kafka에 메시지를 삽입하기 위해 kcat을 사용합니다.
1. 구성 준비
http.api.url입니다. ClickHouse의 HTTP 인터페이스에서는 INSERT 문을 URL 매개변수로 인코딩해야 합니다. 여기에는 포맷(이 경우 JSONEachRow)과 대상 데이터베이스가 포함되어야 합니다. 포맷은 Kafka 데이터와 일치해야 하며, 이 데이터는 HTTP payload에서 문자열로 변환됩니다. 이러한 매개변수는 URL 이스케이프 처리해야 합니다. GitHub 데이터셋에 대한 이 포맷의 예시는 아래와 같습니다(ClickHouse를 로컬에서 실행한다고 가정).
request.method- POST로 설정합니다.retry.on.status.codes- 모든 오류 코드에서 재시도하려면 400-500으로 설정합니다. 데이터에서 예상되는 오류에 맞게 조정하십시오.request.body.format- 대부분의 경우 JSON으로 설정합니다.auth.type- ClickHouse에서 인증을 사용하는 경우 BASIC으로 설정합니다. 현재는 ClickHouse와 호환되는 다른 인증 메커니즘은 지원되지 않습니다.ssl.enabled- SSL을 사용하는 경우 true로 설정합니다.connection.user- ClickHouse 사용자 이름입니다.connection.password- ClickHouse 비밀번호입니다.batch.max.size- 단일 배치로 전송할 행 수입니다. 충분히 큰 값으로 설정되어 있는지 확인하십시오. ClickHouse 권장 사항에 따르면 1000은 최소값으로 간주해야 합니다.tasks.max- HTTP Sink 커넥터는 하나 이상의 작업을 실행할 수 있습니다. 이를 통해 성능을 높일 수 있습니다. 배치 크기와 함께 성능을 개선하는 주요 수단입니다.key.converter- 키의 타입에 맞게 설정합니다.value.converter- topic의 데이터 타입에 따라 설정합니다. 이 데이터에는 스키마가 필요하지 않습니다. 여기서 사용하는 포맷은http.api.url매개변수에 지정된 FORMAT과 일치해야 합니다. 가장 간단한 방법은 JSON과 org.apache.kafka.connect.json.JsonConverter 컨버터를 사용하는 것입니다. org.apache.kafka.connect.storage.StringConverter 컨버터를 사용해 값을 문자열로 처리하는 것도 가능합니다. 다만 이 경우에는 사용자가 함수로 삽입 SQL 문에서 값을 추출해야 합니다. io.confluent.connect.avro.AvroConverter 컨버터를 사용하는 경우 ClickHouse는 Avro 포맷도 지원합니다.