
람다 아키텍처의 단점을 해소하기 위해 고안된 아키텍처이다.
단점으로 부각되었던 로직의 파편화, 디버깅, 배포, 운영 분리에 대한 이슈를 제거하기 위해
배치 레이어를 제거한 카파 아키텍처는 스피드 레이어에서 데이터를 모두 처리할 수 있었으므로 엔지니어들은 더욱 효율적으로 개발과 운영에 임할 수 있게 되었다.
스피드 레이어에서 배치 데이터와 실시간 데이터를 모음으로써 데이터를 일괄적으로 처리하고 서빙 레이어에 적합한 형태로 데이터를 보내는 것이 원칙이다.
이는 카프카를 활용함으로써 달성할 수 있다라는 것이 가장 큰 특징이다.
카프카가 배치 데이터와 스트림 데이터를 모두 모으는 형태로 활용할 수 있어야 한다.
그러기 위해서 스트림 데이터를 한 번에 배치 형태로 활용할 수 있어야 한다.

스트림 데이터에서 키 형태로 배치 데이터를 스냅샷으로 확인하게 되면 그 데이터를 기반으로 배치 데이터 처리를 할 수 있게 된다.
그리고 변환 기록 로그를 남김으로써 배치 데이터를 기반으로 스트림 데이터와 배치 데이터를 함께 운영할 수 있게 되는 것이다.
| 배치 데이터 | 스트림 데이터 |
|---|---|
| - 한정된(bound) 데이터 처리 | - 무한(unbounded) 데이터 처리 |
| - 대규모 배치 데이터를 위한 분산 처리 수행 | - 지속적으로 들어오는 데이터를 위한 분산 처리 수행 |
| - 분, 시간, 일 단위 처리를 위한 지연이 발생함 | - 분 단위 이하 지연 발생 |
| - 복잡한 키 조인 수행 | - 단순한 키 조인 수행 |

배치 데이터는 주로 하둡(Hadoop)으로 많이 처리한다.
mat-release 방식으로 각 데이터 노드에 블록 단위로 저장되었고 이를 각 데이터 노드에서 MapReduce 방식 혹은 스파크에서 메모리로 올리는 방식으로 데이터를 처리한 뒤
HDFS에 데이터를 저장하는 방식으로 많이 활용하곤 한다.

카프카에서 스트림 데이터를 배치로 사용하는 방법은 Materialized View. 구체화된 뷰로 활용하는 방식이다.
카프카 스트림즈 애플리케이션은 특정 일시로 데이터를 가져와서 이를 뷰 형태로 데이터를 한 번에 배치처럼 사용하는 방식이 있다.
이 방식을 통해 key-value store나 큰 용량의 데이터를 분산해서 처리할 수 있게 되는 것이다.
이는 카프카가 로그에 시간(timestamp)를 남김으로써 가능한 처리 방식이다.

카파 아키텍처에서 서빙 레이어를 제거한 아키텍처.
카프카가 배치 데이터도 처리하고 서빙 레이어에 있는 데이터도 모두 카프카로 처리한다는 것이 이 아키텍처이다.
스피드 레이어로 사용되는 카프카의 분석과 프로세싱을 완료한 거대한 용량의 데이터를 오랜 기간 저장하고 사용할 수 있다면 서빙 레이어는 제거되어도 된다. 이는 스트리밍 데이터 레이크의 특징이다.

아직은 카프카를 스트리밍 데이터 레이크로 사용하기 위해 개선해야 할 부분이 있다.
자주 접근하지 않는 데이터를 비싼 자원(브로커의 메모리, 디스크)에 유지할 필요가 없다.
카프카 클러스터에서 이러한 데이터는 오브젝트 스토리지와 같이 저렴하면서 안전한 저장소에 옮겨 저장하고,
자주 사용하는 데이터만 브로커에서 사용하는 구분 작업이 필요하다.
현재 카프카에서는 위의 기능은 제공되고 있지 않다.
현재 버전에서는 모든 데이터를 카프카 브로커의 메모리와 디스크에 올려서 활용하고 있다.