Streams 애플리케이션 토픽 관리
Streams 애플리케이션 토픽 관리
Kafka Streams 애플리케이션은 카프카 토픽을 읽고, 처리하고, 그 결과를 다시 카프카 토픽에 쓰는 일을 반복해요. 그러다 보니 "어떤 토픽은 내가 만들고 관리해야 하고, 어떤 토픽은 애플리케이션이 알아서 만들어요"라는 구분이 중요해져요. 이 페이지에서는 사용자 토픽(user topics)과 내부 토픽(internal topics)의 차이와 관리 방법을 정리해드릴게요.
출처: 문서
본문
Kafka Streams 애플리케이션은 카프카 토픽에서 계속해서 읽고, 읽은 데이터를 처리한 뒤, 처리 결과를 다시 카프카 토픽에 써요. 애플리케이션은 상태 저장소 체인지로그(changelog) 토픽 같은 다른 카프카 토픽도 브로커 안에 자동 생성할 수 있어요. 이 섹션에서는 이러한 토픽 유형들의 차이점과 토픽 및 애플리케이션을 관리하는 방법을 설명해요.
Kafka Streams는 사용자 토픽과 내부 토픽을 구분해요.
사용자 토픽 (User topics)
사용자 토픽은 애플리케이션 외부에 존재하며 애플리케이션이 읽거나 쓰는 토픽이에요. 여기에는 다음이 포함돼요:
- 입력 토픽 (Input topics) — 애플리케이션 토폴로지의 소스 프로세서로 지정된 토픽. 예:
StreamsBuilder#stream(),StreamsBuilder#table(),Topology#addSource()를 통한 토픽. - 출력 토픽 (Output topics) — 애플리케이션 토폴로지의 싱크 프로세서로 지정된 토픽. 예:
KStream#to(),KTable.to(),Topology#addSink()를 통한 토픽.
사용자 토픽은 미리 생성해서 수동으로 관리해야 해요(예: 토픽 도구를 통해). 사용자 토픽이 읽기·쓰기를 위해 여러 애플리케이션 간에 공유된다면, 애플리케이션 사용자들이 토픽 관리를 조율해야 해요. 사용자 토픽이 중앙에서 관리된다면, 애플리케이션 사용자들은 토픽을 직접 관리할 필요 없이 그저 접근 권한을 얻기만 하면 돼요.
주의: 사용자 토픽을 만들 때는 브로커의 자동 생성 토픽(auto-create topic) 기능을 사용하지 않는 것이 좋아요. 그 이유는:
- 토픽 자동 생성이 카프카 클러스터에서 비활성화되어 있을 수 있어요.
- 자동 생성은 복제 팩터(replication factor) 같은 기본 토픽 설정을 자동으로 적용하는데, 이 기본 설정이 특정 출력 토픽에 원하는 값이 아닐 수 있어요 (예: 카프카 브로커 구성의
auto.create.topics.enable=true).
내부 토픽 (Internal topics)
내부 토픽은 실행 중에 Kafka Streams 애플리케이션이 내부적으로 사용하는 토픽이에요. 예를 들어 상태 저장소의 체인지로그 토픽이 있어요. 이 토픽들은 애플리케이션이 생성하며 해당 스트림 애플리케이션에서만 사용돼요.
카프카 브로커에서 보안이 활성화되어 있다면, 내부 토픽 집합을 생성할 수 있도록 기본 클라이언트에 admin 권한을 부여해야 해요. 자세한 내용은 Streams 보안을 참고해요.
주의: 내부 토픽은
<application.id>-<operatorName>-<suffix>명명 규칙을 따르지만, 이 규칙은 향후 릴리스에서 보장되지 않아요.
내부 토픽의 기본 구성에는 다음 설정이 적용돼요:
- 모든 내부 토픽에 대해
message.timestamp.type은CreateTime으로 설정돼요. - 내부 리파티션(repartition) 토픽에 대해 컴팩션 정책은
delete이고 리텐션 시간은-1(무한)이에요. - 키-값 저장소용 내부 체인지로그 토픽에서 컴팩션 정책은
compact예요. - 윈도우 키-값 저장소용 내부 체인지로그 토픽에서 컴팩션 정책은
delete,compact예요. 리텐션 시간은 윈도우 저장소 설정에 24시간을 더한 값으로 설정돼요. - 버전 상태 저장소(versioned state store)용 내부 체인지로그 토픽에서 정리 정책은
compact이고,min.compaction.lag.ms는 저장소의historyRetentionMs값에 24시간을 더한 값으로 설정돼요.
더 알아보기
- Streams 애플리케이션 실행하기 — 실행 시 토픽과 관련된 운영 고려사항을 봐요.
- Streams 보안 — 내부 토픽 생성을 위한 권한 설정을 봐요.
- 브로커 쪽 토픽 생성·관리 도구는 카프카 운영 문서를 참고해요.