인프런 커뮤니티 질문&답변

techsupport2님의 프로필 이미지
techsupport2

작성한 질문수

카프카 완벽 가이드 - 커넥트(Connect) 편

kafka 에 직접 넣은 데이터를 sink connector로 보내는 방법

작성

·

535

1

안녕하세요 자주 질문을 드리게 되어 죄송합니다.

데이터가 이동하면서 아래와 같은 작업이 이루어지는 것을 강의를 통해 이해했습니다.

source connector --> kafka : 직렬화

kafka --> sink connector : 역직렬화

 

그렇다면 혹시 java 를 사용하여 kafka로 바로 데이터를 적재 할 경우 sink connector로

데이터를 보낼 수가 있을까요?? 역직렬화 작업이 안될 것으로 보여서 가능한지 질문 드립니다.

가능하지 않다면 java로 kafka를 보낼 때 직렬화 작업이 된 상태로 보내야 할까요??

답변 1

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

질문은 언제든 환영입니다. 부담 갖지 않으셨으면 합니다.

근데 질문을 제가 정확히 이해하지 못했습니다만,,,,,,

kafka는 기본적으로 직렬화된 메시지가 날라갑니다. 그러니까 토픽에 저장된 모든 메시지는 connect를 통하던 그렇지 않던 직렬화가 됩니다.

그런데 connect의 직렬화는 보통 json format과 같은 메시지를 직렬화 합니다. 그러니까, DB 등의 데이터 소스를 연동해서 Kafka topic으로 입력하는 소스 커넥터는 데이터를 json 형태로 받아서 이를 직렬화 시키는 것입니다. 그리고 Sink 커넥터는 json 형태로 데이터를 역직렬화 하는 것입니다.

직렬화는 기본이고, Json기반으로 Formatting을 만들어 주는게 일반적인 커넥터의 역할 입니다.

그래서 java로 kafka에 데이터를 보내면(소스 커넥터의 역할을 java client가 producer로 해줄 경우), 이를 sink connector에서 읽어 들일 수 있지만, 문제는 json 기반등의 포맷으로 kafka에 메시지를 보내면 sink connector에서 이를 json 포맷으로 읽어 들일 수 있게 서로간의 프로토콜(?)이 맞아야 합니다.

가령 예를 들어 java로 kafka topic에 메시지를 보냈는데, jdbc sink connector로 읽어 들여서 db에 데이터를 입력하려고 한다면 java로 보내는 topic메시지는 jdbc sink connector가 인지 할 수 있는 포맷으로 보내져야 합니다. 그렇지 않으면 sink connector가 제대로 동작하지 못합니다.

여러가지 유형의 sink connector는 각각 읽어들이는 format이 다를 수 있습니다. 이러한 format 유형에 맞춰서 java에서 kafka로 메시지를 직렬화 해서 보내주기만 하면 sink connector가 읽어들일 수 있지만, 이런 부분이 어려울수 있습니다.

원하시는 답변이 아니면 다시 글 부탁드립니다.

감사합니다.

techsupport2님의 프로필 이미지
techsupport2

작성한 질문수

질문하기