Kafka용 Openflow 커넥터 성능 튜닝
Kafka용 Openflow 커넥터 성능 튜닝
이 주제는 Snowflake Openflow Connector for Kafka의 성능을 최적화해 데이터를 Snowflake로 수집할 때 최적의 처리량을 얻고 지연 시간을 최소화하는 안내를 제공해요.
출처: Snowflake 문서
본문
참고: 이 커넥터는 Snowflake Connector Terms가 적용돼요.
이 주제는 Snowflake Openflow Connector for Kafka의 성능을 최적화해 데이터를 Snowflake로 수집할 때 최적의 처리량을 얻고 지연 시간을 최소화하는 안내를 제공해요.
성능 고려 사항
Openflow Connector for Kafka를 최적의 성능으로 구성할 때 수집 처리량과 지연 시간에 영향을 주는 다음 핵심 요소를 고려해요:
Kafka 구성
파티션 수(Partition count)
파티션을 더 많이 두면 더 높은 병렬성을 얻을 수 있지만 컨슈머 구성과 신중한 조정이 필요해요. 지나치게 많은 파티션은 메모리 사용 증가, 장애 중 느린 리더 선출(leader election), 브로커의 상당한 메타데이터 관리 오버헤드 같은 여러 문제를 일으킬 수 있어요.
압축(Compression)
메시지 압축은 네트워크 대역폭을 줄일 수 있지만 CPU 오버헤드를 증가시켜요.
Flowfile 최적화
Flowfile 크기
최적의 성능을 위해 flowfile은 개별 작은 메시지를 담기보다 1-10 MB 범위여야 해요. 더 큰 flowfile은 개별 파일 작업 수를 최소화해 처리 오버헤드를 줄이고 처리량을 개선해요. 기본 설정으로 flowfile이 허용 가능한 크기 범위에서 생겨야 해요. 처리량이 낮을 때는 작은 flowfile이 생기는 것이 정상이에요.
높은 처리량인데도 작은 flowfile이 관찰된다면 Snowflake Support에 문의해 도움을 받으세요.
네트워크 및 인프라
네트워크 지연 시간
Kafka 브로커와 Openflow 사이의 지연 시간이 낮을수록 전반적인 성능이 개선돼요. Snowflake는 Kafka 브로커와 Openflow를 같은 CSP 리전에 배포할 것을 권장해요.
노드 크기 권장 사항
다음 표는 예상 워크로드 특성에 기반한 구성 권장 사항을 제공해요:
| 노드 크기 | 권장 대상 | 메시지 속도 용량 |
|---|---|---|
| Small (S) | 낮음~중간 처리량 시나리오 | 노드당 최대 18 MB/s |
| Medium (M) | 중간~높음 처리량 시나리오 | 노드당 최대 145 MB/s |
| Large (L) | 높은 처리량 시나리오 | 노드당 최대 250 MB/s |
성능 최적화 모범 사례
프로세서 동시 작업 수 조정
프로세서 성능을 최적화하려면 ConsumeKafka와 PublishSnowpipeStreaming 프로세서 모두의 동시 작업(concurrent tasks) 수를 조정할 수 있어요. 동시 작업을 사용하면 프로세서가 여러 스레드를 동시에 실행할 수 있어 높은 볼륨 시나리오에서 처리량이 개선돼요.
프로세서의 동시 작업 수를 조정하려면:
- Openflow 캔버스에서 프로세서를 마우스 오른쪽 버튼으로 클릭해요.
- 컨텍스트 메뉴에서 Configure를 선택해요.
- Scheduling 탭으로 이동해요.
- Concurrent tasks 필드에 원하는 동시 작업 수를 입력해요.
- Apply를 선택해 구성을 저장해요.
권장 동시 작업 설정
다음 표는 다양한 노드 크기에 대한 권장 동시 작업 설정을 제공해요:
| 노드 크기 | ConsumeKafka 작업 | PublishSnowpipeStreaming 작업 |
|---|---|---|
| Small (S) | 1 | 1 |
| Medium (M) | 4 | 2 |
| Large (L) | 8 | 2 |
중요한 고려 사항
- 메모리 사용: 각 동시 작업은 추가 메모리를 소비해요. 동시 작업을 늘릴 때 JVM 힙 사용량을 모니터링해요.
- Kafka 파티션: ConsumeKafka의 경우 동시 작업 수에 런타임 노드 수를 곱한 값이 모든 토픽의 총 Kafka 파티션 수를 초과하지 않아야 해요.
- 보수적으로 시작하기: 낮은 값에서 시작해 성능 메트릭을 모니터링하면서 점차 늘려요.
성능 문제 해결: 일반적인 성능 병목
높은 컨슈머 지연 또는 Snowflake 수집 병목
Kafka 컨슈머 지연(lag)이 증가하거나 Snowflake 수집이 느리다면 다음 작업을 수행해요:
- Openflow와 Kafka 브로커 사이의 네트워크 연결과 대역폭을 확인해요.
- PublishSnowpipeStreaming 프로세서 앞의 큐가 증가하는지 관찰해요.
- 증가한다면 권장 동시 작업 설정에서 제공된 범위 안에서 PublishSnowpipeStreaming 프로세서의 동시 작업을 더 추가하는 것을 고려해요.
- 증가하지 않는다면 권장 동시 작업 설정에서 제공된 범위 안에서 ConsumeKafka 프로세서의 동시 작업을 더 추가하는 것을 고려해요.
- 더 큰 노드 유형을 사용하는 것을 고려해요.
- 런타임의 최대 노드 수를 늘리는 것을 고려해요.
메모리 압박
메모리 관련 문제가 발생한다면:
- 배치 크기를 줄여 메모리 사용량을 낮춰요.
- ConsumeKafka 프로세서의 동시 작업 수를 줄여요.
- 더 큰 노드 유형으로 업그레이드하는 것을 고려해요.
네트워크 지연 시간 문제
높은 지연 시간이 발생한다면:
- Openflow와 외부 시스템 사이의 네트워크 구성을 확인해요.
- Openflow를 Kafka 클러스터에 더 가깝게 배포하는 것을 고려해요.
- 낮은 처리량으로 작업한다면 ConsumeKafka 프로세서의 Max Uncommitted Time을 낮추는 것을 고려해요.