기업들의 사용
- 개발 API
- 모니터링
- 연속적인 데이터의 흐름의 유입량과 주기가 불규칙
- 대표적 : 통신사 , 제조 (반도체 제외 - 클라우드 사용 못함) , 제조 , 리테일
kafka 이전
- File 또는 DB 기반 데이터 연동
- 네트워크 문제, 프로그래밍 문제 등 장애시 재처리가 어려움
- 예외처리가 많음
- 너무 많은 데이터로 잘 전달되지 않음
- Message Queue 활용
- API 기반 데이터 전달
- Queue에 넣어주는 것 ( Kafka와 비슷한 로직)
- 메모리를 넘어서는 데이터가 들어오면 대용량 데이터 처리 한계 [ 데이터 유실 가능]
- NAS등 스토리지 서버
Kakfa 이외
- Rabbit MQ
- 범용적 메시지 브로커
- 다양한 큐 기능 제공
- UI 기반 모니터링
- Kafka
- redis
- 지연 없는 빠른 전달
- 메모리 기반
- 조금의 유실 가능
Kafka 장점
- 디스크 사용
- 디스크 : 순차적으로 가져옴
- 카프카 : 순서대로 저장 -> 디스크도 순서대로 움직임 (왔다갔다 하지 않아도됨)
- 카프카는 이런 용도로만 사용해야힘
- 어제 데이터 -> 오늘 -> 그저께 이런식으로 사용하면 안됨.
- 꼬옥!!시간에 흐름 이력 데이터에 최적화 되어있음.
- zero copy
- kernel 레벨에서 바로 데이터 전송
- 원래는 (disk -> buffer -> ui -> buffer -> nic buffer)
- 원래는 java에서 사용하기 때문에 application기능으로 I/O가 되어야하는데, kafka는 그런게 없음.
- application 코드 내에 커널 내에서 쓰는 api 사용 -> transferTo()
- 대용량 처리
- 원래는 데이터 복제로 유실을 적게 함
- 분산 병렬 처리
- 유실 안정성
- 복제 : 여러대 서버에 동시에 적재
- 여러 파티션에 복제 ( 다른 서버에 데이터가 존재함)
- 처리량
- 100byte 기준 초당 600만건 정도 가능
- 1000bye 기준 200만건 조금 안되게 처리 가능
- 레코드사이즈가 작을수록 더 많은 건 수를 전송 가능
- 레코드 사이즈가 클수록 더 많은 데이터를 전송 가능
- 작은 메시지 많이 vs 한번에 많이
- rabbitMQ는 초당 30mb 이상은 처리 못함
- 카프카는 605MB까지 초당 보낼 수 있음.
- 데이터 허브 역할
- 그냥 냅다 넣어놓고 가져가고 싶은 사람한테 가져가고 싶은 사람이 가능하도록 함.
- 재사용, 중복 투자
Kafka의 활용
- 통신
- 비 정상 통화 이력
- 사용자 위치 기반 통계 ( 재난상황 등)
- 기지국 트래픽 분석 ( 통신품질 - 안테나)
- 통신 환경 사전 감지 및 개선
- 금융
- 비 정상 거래 내역 감지
- 대출 사기 감지
- 거래 패턴 조회
- 내부 데이터 송수신
- 제조 및 유통
- 장비 센서 고장 감지
- 제품 불량 탐지
- 고객 피드백 분석
- 제품 현황 분석 등