Kafka 코어 API: 프로듀서·컨슈머와 그 너머
Kafka 코어 API: 프로듀서·컨슈머와 그 너머
Kafka를 코드로 다루려면 어떤 API가 있는지부터 알아야 해요. 이번엔 여섯 가지 코어 API를 한눈에 정리하고, 특히 프로듀서(Producer)·컨슈머(Consumer) API를 어떻게 가져다 쓰는지 중심으로 볼게요. Kafka는 모든 기능을 언어 독립적인 프로토콜로 제공해서 여러 언어 클라이언트가 있지만, 공식 유지보수는 Java 클라이언트가 담당해요.
여섯 가지 코어 API
Kafka는 다음 여섯 가지 코어 API를 제공해요.
- Producer API — 애플리케이션이 데이터 스트림을 Kafka 클러스터의 토픽으로 보내는(쓰는) API.
- Consumer API — 애플리케이션이 Kafka 클러스터의 토픽에서 데이터 스트림을 읽는 API.
- Share Consumer API — share group 안의 애플리케이션이 Kafka 토픽의 데이터를 협력적으로 소비·처리하게 하는 API.
- Streams API — 입력 토픽의 데이터 스트림을 변환해 출력 토픽으로 내보내는 API.
- Connect API — 어떤 소스 시스템·애플리케이션에서 Kafka로 계속 당겨오거나, Kafka에서 어떤 싱크 시스템·애플리케이션으로 미는 커넥터를 구현하게 하는 API.
- Admin API — 토픽, 브로커, 기타 Kafka 객체를 관리하고 조사하는 API.
Java 외의 클라이언트는 공식 프로젝트가 아니라 각각 독립적인 오픈소스 프로젝트로 제공돼요.
Producer API
Producer API는 애플리케이션이 Kafka 클러스터의 토픽으로 데이터 스트림을 보내게 해 줘요. 사용 예는 javadoc에서 확인할 수 있어요.
프로젝트에 아래 Maven 의존성을 추가하면 돼요.
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>4.3.1</version>
</dependency>
Consumer API
Consumer API는 애플리케이션이 Kafka 클러스터의 토픽에서 데이터 스트림을 읽게 해 줘요. 사용 예는 javadoc에서 확인할 수 있어요.
Producer와 같은 Maven 의존성을 쓰면 돼요.
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>4.3.1</version>
</dependency>
Share Consumer API
Share Consumer API는 share group의 애플리케이션이 Kafka 토픽의 데이터를 협력적으로 소비·처리하게 해 줘요. 사용 예는 javadoc에서 확인할 수 있어요.
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>4.3.1</version>
</dependency>
Streams API
Streams API는 입력 토픽의 데이터 스트림을 변환해 출력 토픽으로 내보내요. 사용 예는 javadoc, 추가 문서는 여기에 있어요.
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>4.3.1</version>
</dependency>
Scala를 쓴다면 kafka-streams-scala를 선택적으로 포함할 수 있어요.
⚠️ DEPRECATION NOTICE:
kafka-streams-scala라이브러리는 Kafka 4.3부터 deprecated이며 Kafka 5.0에서 제거될 예정이에요. Scala에서 Java Streams API를 직접 쓰는 쪽으로 마이그레이션하세요.
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams-scala_2.13</artifactId>
<version>4.3.1</version>
</dependency>
Connect API
Connect API는 어떤 소스 데이터 시스템에서 Kafka로 계속 당겨오거나, Kafka에서 어떤 싱크 데이터 시스템으로 미는 커넥터를 구현하게 해 줘요. 많은 사용자는 코드를 작성하지 않고 미리 만들어진 커넥터를 쓸 수 있어서 이 API를 직접 쓸 필요가 없어요. 커스텀 커넥터를 만들고 싶다면 javadoc을 보세요.
Admin API
Admin API는 토픽, 브로커, ACL, 기타 Kafka 객체를 관리하고 조사하게 해 줘요. kafka-clients 의존성으로 쓸 수 있고,
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>4.3.1</version>
</dependency>
더 자세한 내용은 Admin javadoc을 보세요.
더 알아보기
- 프로듀서·컨슈머가 내부적으로 어떻게 동작하는지는 Design 문서를 보세요.
- Kafka Streams로 스트림 처리 애플리케이션을 만들어 보세요.