728x90
반응형
Kafka를 이용한 대용량 3D 이미지 데이터를 전달하여, 딥러닝 모델을 구축하기 위한 python 코드를 개발 중이다.
목표는 100MB의 대용량 파일을 1초 이내로 보내는 것을 목표로 하고 있다.
현재는 임의의 데이터를 이용하여 데이터를 전달하려고 한다.
(Kafka로 안된다면, Spark나 Flink를 이용할 예정이다.)
첫 번째 시도로, 30MB의 mp4 파일을 카프카 서버로 produing하는 시간은 대략 5.5~ 5.9초 정도 소요가 된다.
import time
from kafka import KafkaProducer
# Kafka Producer 설정
producer = KafkaProducer(
bootstrap_servers=['localhost:9092'],
batch_size=65536, # 기본값 16384 (16KB)
linger_ms=10 # 기본값 0
)
# 파일을 분할하여 전송
with open('path/to/example.mp4', 'rb') as f:
chunk_size = 1024 * 10 # 1MB 청크
chunks = []
while True:
chunk = f.read(chunk_size)
if not chunk:
break
chunks.append(chunk)
start_time = time.time()
for chunk in chunks:
producer.send('video_topic', chunk)
producer.flush()
end_time = time.time()
print("time : ", end_time - start_time, "sec")
# Producer 종료
producer.close()
문제는 카프카 서버에서 consuming이 너무 늦게 된다..
10분이 넘어도, consuming 완료되지 않아서, 코드 실행을 종료하였다..
하드웨어 스펙의 문제일 수도 있다는 점도 고려해볼 사안이다.
<하드웨어 스펙 고려사항>
- 네트워크 대역폭: 카프카는 대량의 데이터를 전송하므로 고성능 네트워크 인터페이스가 필요합니다. 10GbE 또는 40GbE 인터페이스를 사용하는 것이 좋습니다.
- CPU: 카프카는 대량의 데이터를 처리하므로 고성능 CPU가 필요합니다. 최소한 4 코어 이상의 CPU가 필요하며 대부분의 경우 8 코어 이상의 CPU가 필요합니다.
- 메모리: 카프카는 메시지를 디스크에 저장하기 전에 메모리에 버퍼링합니다. 따라서 충분한 메모리가 필요합니다. 메시지 크기에 따라 메모리 요구 사항이 달라지지만 일반적으로 메시지 크기의 2-3 배 이상의 메모리가 필요합니다.
- 디스크: 카프카는 대량의 데이터를 디스크에 저장하므로 고성능 디스크가 필요합니다. SSD를 사용하는 것이 좋습니다.
- 카프카 클러스터 구성: 카프카 클러스터는 여러 브로커로 구성되며, 브로커 수는 클러스터의 처리 능력에 직접적인 영향을 미칩니다. 일반적으로 클러스터에는 3개 이상의 브로커가 필요합니다.
728x90
반응형
'Error > problem and solution' 카테고리의 다른 글
카프카 500,000 events/s 처리(2) (1) | 2023.05.11 |
---|---|
[KAFKA] Failed to clean up log for __consumer_offsets, Shutdown broker because all log dirs in 원인 분석 및 해결방안 (1) | 2023.04.24 |
카프카 500,000 events/s 처리(1) (0) | 2023.04.21 |
(Python) 대용량 데이터 처리 속도 높이기(3) (0) | 2023.04.20 |
(M1 mac) vpn 연결 및 gitlab 접속 문제 해결 (0) | 2023.04.18 |
댓글