Kafka Connect MongoDB Sink Connector 등록/수정/삭제/조회

36 sec read

등록 (Insert)✅ 가능기본 동작
수정 (Update)✅ 가능특정 설정 + 메시지 포맷 필요
삭제 (Delete)✅ 가능특정 설정 + Tombstone 메시지
조회 (Select)❌ 불가Sink는 쓰기 전용(읽기 불가)

 


1. 등록 (Insert)

  • 아무 설정도 추가 안 해도 Kafka → MongoDB로 “Insert” 됩니다.
  • Kafka에 JSON 데이터가 오면 → MongoDB 컬렉션에 새 문서로 들어갑니다.

Kafka 메시지 예시:

{
  "id": "123",
  "name": "Alice",
  "email": "alice@example.com"
}

MongoDB 결과:

{
  "_id": ObjectId("..."),
  "id": "123",
  "name": "Alice",
  "email": "alice@example.com"
}

2. 수정 (Update)

MongoDB에서 기존 문서를 “수정”하고 싶을 때는 설정이 필요합니다.

필수 설정:

  • writemodel.strategy를 ReplaceOneBusinessKeyStrategy 또는 UpdateOneBusinessKeyStrategy 로 설정해야 합니다.
{
  "writemodel.strategy": "com.mongodb.kafka.connect.sink.writemodel.strategy.ReplaceOneBusinessKeyStrategy",
  "document.id.strategy": "com.mongodb.kafka.connect.sink.processor.id.strategy.PartialValueStrategy",
  "document.id.strategy.overrides": "your-topic:com.mongodb.kafka.connect.sink.processor.id.strategy.PartialValueStrategy",
  "document.id.strategy.partial.value.projection.list": "id",
  "document.id.strategy.partial.value.projection.type": "AllowList"
}
  • 여기서 “id” 같은 필드를 기준으로 MongoDB 문서를 찾아서 덮어씁니다.

Kafka 메시지 예시 (Update):

{
  "id": "123",
  "email": "alice_updated@example.com"
}

MongoDB 결과:

{
  "_id": ObjectId("..."),
  "id": "123",
  "name": "Alice", // name은 없어질 수 있음 (Replace 방식 주의!)
  "email": "alice_updated@example.com"
}

💡 주의: Replace 방식은 전체 문서를 “덮어쓰기” 때문에 필요한 필드를 모두 포함해야 해요.
Update만 하고 싶으면 별도 Update Strategy 써야 합니다.


3. 삭제 (Delete)

Kafka → MongoDB 문서를 “삭제”도 가능합니다.
방법은 Tombstone 메시지를 보내는 겁니다.

Tombstone 메시지란?

  • Kafka 메시지에서 value를 null로 보내는 것
  • key 값만 남기고 value가 null → 이걸 MongoDB Sink가 감지해서 삭제합니다.

Kafka Tombstone 예시:

# Key: {"id": "123"}
# Value: null

필수 설정 추가:

{
  "delete.on.null.values": "true"
}

이걸 켜야만, value=null일 때 MongoDB에서 삭제됩니다.


4. 조회 (Select)

**조회(Select)**는 Kafka Connect Sink로는 절대 할 수 없습니다. ❌

  • Sink Connector는 Kafka → MongoDB로 쓰기 전용입니다.
  • MongoDB 데이터를 읽어오려면 Source Connector(반대 방향)를 써야 합니다.

루아 Lua 프로그래밍 : 모듈과 패키지 가이드

지금까지 우리는 함수로 코드를 묶고, 테이블로 데이터를 구조화하는 방법을 익혔습니다. 하지만 프로젝트의 규모가 커지기 시작하면, 모든 코드를 단 하나의 파일에 담는 것은 금세 한계에...
eve
53 sec read

루아 (Lua) 프로그래밍: 테이블과 메타테이블의 모든 것

Lua 프로그래밍의 여정에서 가장 중요하고 흥미로운 지점에 도달했습니다. 바로 Lua 언어의 심장이자 가장 중심적인 기능인 테이블(Table)입니다. Lua에는 배열, 딕셔너리, 리스트, 객체 등을 위한 별도의...
eve
1 min read

루아(Lua) 프로그래밍: 제어 구조 조건과 반복

지금까지 우리는 변수에 데이터를 저장하고, 연산자로 이 데이터들을 계산하고 비교하는 방법을 배웠습니다. 하지만 프로그램이 단순히 위에서 아래로 순서대로만 실행된다면, 매우 단순한 작업밖에 할 수...
eve
1 min read