이번 포스트에서는 아파치 카프카를 이해하기 위하여 필요한 기본적인 용어에 대하여 알아보겠습니다!
메시지는 바이트 배열입니다. 메세지에 포함되어 있는 데이터는 특정한 형식이 없습니다. 또한 카프카 시스템은 메세지에 포함되어 있는 데이터 내용에 관심이 없습니다.
메세지는 옵션으로 키(key) 라는 메타 데이터를 가질 수 있습니다. 키 또한 바이트 배열입니다. 키는 오로지 해당 메세지가 어떤 파티션에 저장될지 결정하는 용도로만 쓰입니다.
배치는 똑같은 토픽과 파티션에 저장될 메세지의 집합입니다. 메세지 하나씩 네트워크로 전송되면, 부하가 큼으로 배치 단위로 전송함으로써 해당 부하를 줄일 수 있습니다.
메세지는 단순한 바이트 배열이지만, 쉬운 해석을 위하여 스키마의 형식에 대한 정보를 추가하는 것을 권장됩니다. 스키마는 Json,XML, Apach Avro와 더불어 커스텀 스키마도 사용할 수 있습니다.
카프카에서 일관된 데이터 포맷은 중요합니다. 이를 통해 메시지의 작성과 읽기를 분리하기 때문입니다. 따라서, 새로운 데이터 스키마를 추가해도, 기존 스키마 또한 병행하여 사용됩니다.. 따라서 오래된 스키마와 새로운 스키마 형식을 가진 메세지 모두를 일관적으로 처리할 수 있습니다. 잘 정의된 스키마를 사용하고 이를 공통의 저장소에 저장함으로써, 카프카의 메시지를 추가적인 조율 없이 해석할 수 있습니다.
각 메시지는 하나의 토픽에 속합니다. 토픽은 메시지를 분류하고 구독하는 데 사용되며, 특정 토픽에 대해 관심이 있는 컨슈머들은 해당 토픽의 메시지를 수신합니다. 카프카 클러스터 내에는 여러 토픽이 존재할 수 있으며, 각 토픽은 다시 하나 이상의 파티션으로 분할됩니다
파티션은 토픽을 물리적으로 분할하는 방법입니다. 각 토픽은 하나 이상의 파티션으로 구성됩니다.
파티션을 통해 데이터는 순서대로 저장되며, 각 파티션은 메시지의 로드를 분산시키는 데 도움이 됩니다. 파티션은 확장성과 병렬 처리를 가능하게 하며, 데이터를 여러 브로커에 걸쳐 저장할 수 있도록 합니다.
프로듀서는 메시지를 생성하고 카프카 시스템에 전송하는 역할을 합니다. 프로듀서는 메시지를 특정 토픽의 하나 이상의 파티션에 전송할 수 있으며, 부하 분산과 고가용성을 위해 파티션을 선택하는 로직을 구현할 수 있습니다.
브로커는 카프카 시스템의 서버로, 메시지를 저장하고 관리합니다. 카프카 클러스터는 여러 브로커로 구성될 수 있으며, 각 브로커는 하나 이상의 토픽의 파티션을 관리합니다. 브로커는 메시지의 높은 처리량과 데이터의 내구성을 보장하기 위해 설계되었습니다.
컨슈머는 카프카에서 메시지를 읽는 역할을 합니다. 컨슈머는 하나 이상의 토픽을 구독하고, 해당 토픽의 메시지를 가져와서 처리합니다. 컨슈머는 그룹으로 조직될 수 있으며, 이는 메시지 처리를 여러 인스턴스에 걸쳐 분산시키는 데 도움이 됩니다.
이번 포스트에서는 아파치 카프카를 이해하기 위하여 필요한 기본적인 용어에 대하여 알아보았습니다. 다음 포스트에서는 카프카의 특징에 대하여 알아보겠습니다.
Reference
1. [Kafka: The Definitive Guide] : https://www.oreilly.com/library/view/kafka-the-definitive/9781491936153/
2. [Kafka: a Distributed Messaging System for Log Processing] : https://pages.cs.wisc.edu/~akella/CS744/F17/838-CloudPapers/Kafka.pdf