2011년 링크드인에서 파편화된 데이터 수집 및 분배 아키텍처를 운영하는 데 어려움을 겪음.
데이터를 생성하고 적재하기 위해서는 데이터를 생성하는 소스 애플리케이션과
데이터가 최종 적재되는 타깃 애플리케이션을 연결해야 한다.
초기 운영 시, 단방향 통신을 통해 두 애플리케이션을 연동하는 소스코드를 작성하였고,
아키텍처는 복잡하지 않아 운영이 힘들지 않았지만,
시간이 지날수록 아키텍처가 거대해지면서, 소스 애플리케이션과 타깃 애플리케이션의 수가 많아져 문제가 발생하기 시작하였다.

링크드인에서는 파편화된 데이터 파이프라인의 복잡도를 낮춰주는 아키텍처를 구현하려 노력하였고, 시도 끝에 데이터팀에서 신규 시스템을 만들기로 하였고 그 시스템이 바로 아파치 카프카(Apache Kafka)이다.


카프카는 기본적으로 토픽(Topic) 이라는 개념이 제공된다.
이 토픽은 RDBMS의 Table과 같은 개념이라고 볼 수 있다.
토픽은 구분하고자 하는 데이터의 구분에 따라서 토픽을 새로 만들고 운영하면 된다.
토픽은 1개 이상의 파티션(partition)을 가지게 된다.
파티션에 데이터가 저장이 되는데, FIFO 방식의 큐(Queue) 자료구조와 유사하게 동작한다.
큐에 데이터를 보내는 것이 프로듀서, 데이터를 가져오는 것이 컨슈머이다.
컨슈머가 데이터를 가져오더라도 파티션의 데이터는 삭제되지 않는다. 이 점이 카프카의 특징이다.
그리고 컨슈머가 어떤 데이터까지 읽었는 지를 내부적으로 기록하는데, 이를 커밋이라고 한다.