Kafka 카프카 커스텀 소스 커넥터
Kafka Custom Source Connector
소스 커넥터를 만들 때는 connect-api 라이브러리를 추가해야 한다.
connect-api 라이브러리에는 커넥터를 개발하기 위한 클래스들이 포함되어있다.
Dependency : org.apache.kafka:connect-api:2.5.0
SourceConnector, SourceTask
- SourceConnector
- 태스크를 실행하기 전 커넥터 설정파일을 초기화하고 어떤 태스크 클래스를 사용할 것인지 정의하는 데에 사용한다.
- 그렇기 때문에 SourceConnector에는 실질적인 데이터를 다루는 부분이 들어가지는 않는다.
- SourceTask
- 소스 애플리케이션 또는 소스 파일로부터 데이터를 가져와서 토픽으로 데이터를 보내는 역할을 수행한다. SourceTask만의 특징은 토픽에서 사용하는 오프셋이 아닌 자체적으로 사용하는 오프셋을 사용한다는 점이다.
- SourceTask에서 사용하는 오프셋은 소스 애플리케이션 또는 소스 파일을 어디까지 읽었는지 저장하는 역할을 한다. 이 오프셋을 통해 데이터를 중복해서 보내는 것을 방지할 수 있다.
- 예를 들어, 파일의 데이터를 한 줄씩 읽어서 토픽으로 데이터를 보낸다면 토픽으로 데이터를 보낸 줄 번호(line)를 오프셋에 저장할 수 있다.
SourceConnector Spec
class TestSourceConnector : SourceConnector() {
override version(): String {}
override start(props: Map<String, String>) {}
override taskClass(): KClass<* out Task> {}
override taskConfigs(maxTasks: Int): List<Map<String, String>> {}
override config(): ConfigDef {}
override stop(): {}
}
SourceTask Spec
class TestSourceTask : SourceTask() {
override version(): String {}
override start(props: Map<String, String>) {}
override poll(): List<SourceRecord> {}
override stop() {}
}
커넥터 옵션값 설정시 중요도(Importance) 지정 기준
커넥터를 개발할 때 옵션값의 중요도를 Importance enum 클래스로 지정할 수 있다. Importance enum 클래스는 HIGH, MEDIUM, LOW 3가지 종류로 나뉘어 있다.
결론부터 말하자면 옵션의 Importance를 HIGH, MEDIUM, LOW로 정하는 명확한 기준은 없다. 단지 사용자로 하여금 이 옵션이 중요하다는 것을 명시적으로 표시하기 위한 문서로 사용할 뿐이다. 그러므로 커넥터에서 반드시 사용자가 입력한 설징이 필요한 값은 HIGH, 사용자의 입력값이 없더라도 상관없고 기본값이 있는 옵션은 MEDIUM, 사용자의 입력값이 없어도 되는 옵션을 LOW 정도로 구분하여 지정하면 된다.
Importance enum 클래스에 대한 정리 작업은 카프카 내부에서도 논의하고 있으며 상세한 사항은 http://bit.ly/3aLcas6 에서 확인할 수 있다.
Comments