Kafka Topics
-
카프카 토픽은 카프카 클러스터 안에 있는 데이터 스트림 이다.
- 카프카 클러스터 안에는 다양한 토픽이 존재한다.
- 다양하게 이름을 정할 수 있다.
- 카프카 클러스터 안에서 이름을 이용해서 토픽을 식별한다.
-
토픽은 데이터베이스의 테이블과 비슷하며 Stack 형태로 쌓여있다.
- 아무런 제약이 없다
- 데이터 검증이 없다
- 원하는 모든 데이터는 모두 토픽에 전송할 수 있다.
-
토픽은 모든 종류의 메세지 형태를 지원한다.
- JSON,TXT, Binary등
-
토픽 안에 메세지들의 순서를 데이터 스트림이라고 부른다. 그래서 카프카를 데이터 스트리밍 플랫폼이라고 부르기도 한다.
- 토픽을 통해 데이터 스트림을 만든다.
- 토픽은 쿼리할 수 없지만 토픽에 데이터를 추가할 수 있다.
- 카프카 프로듀서를 사용하고, 토픽 데이터를 읽기 위해 카프카 컨슈머를 이용한다.
-
토픽들은 쿼리할 수 없지만, 그걸 파티션들로 분할할 수 있다. 하나의 토픽이 가령 100개의 파티션으로 구성될 수 있다.
- 카프카로 전송된 데이터는 각 파티션으로 들어가고 각각 순서가 정해진다. 계속 메세지를 작성하게 되면 id가 계속 증가하게 된다. 결국 각각의 id를 갖게 되고 0부터 계속 증가하게 된다.
- 각각의 id를 카프카 파티션 오프셋이라고 한다.
- 카프카 토픽은 이뮤터블이다.
- Mutable – 변경이 가능한 객체
- Immutable – 생성후 변경이 불가능한 객체
-
카프카가 있음으로써 어떠한 서비스를 실행하던 동일한 데이터 스트림을 다수의 서비스가 읽을 수 있다는 장점이 있다.
Kafka Topics, Partitions, Offsets의 중요한 사항들
일단 어떤 데이터가 파티션에 기록되면 그 데이터는 변경되지 않는다. 변경될 수 없고, 그걸 불가변성이라고 한다.
- 카프카의 데이터는 일정한 시간동안만 유지된다. 설정할 수 있지만 기본값은 1주일로 해당 기간이 지나면 데이터가 사라진다.
- 오프셋기능은 특정한 파티션에 대해서만 의미가 있으며, 오프셋은 파티션마다 반복되어 처리되는데 오프셋이 같아도 파티션마다 들어있는 데이터가 다르기때문에 A파티션 3이 B파티션의 3의 데이터를 대변하지 않는다. 앞의 데이터가 삭제되어도 그 오프셋을 재사용할 수 없게 된다.
- 메세지를 카프카 토픽에 전송하면 오프셋은 1씩 계속 증가하는데 메세지의 순서가 한 파티션 안에서만 보장된다는걸 유의해야 한다.
- 키를 제공하지 않는 경우에는 자동으로 오프셋이 증가한다.
- 토픽에 맞는 적절한 파티션 개수를 결정하는 방법에 대해 알아야 한다.