기타

APISIX Lua 변환 vs Kafka Connect SMT 변환 차이점과 장단점

ipxy 2025. 4. 14. 16:42
728x90

📖 용어 정리

항목 설명
APISIX Lua 변환 API 요청이 APISIX에 도착했을 때 Lua 코드로 JSON/데이터를 변환
Kafka Connect SMT 변환 Kafka Connect가 Kafka Topic에 적재할 때 (또는 읽을 때) 데이터 포맷을 변환하는 플러그인 기능

🧠 변환 위치 기준

위치 설명
APISIX (Ingress) 요청(Request)이 Backend로 가기 전에 변환
Kafka Connect (ETL/Stream) Kafka에 저장되거나 Kafka로부터 읽을 때 변환 (중간 처리)

즉, APISIX는 앞단에서 처리, Kafka Connect는 뒷단에서 처리합니다.


✅ 장단점 비교

항목 APISIX Lua 변환  Kafka Connect SMT 변환
처리 시점 요청 수신 시 (HTTP 수신 시 즉시 변환) Kafka 스트림에 들어올 때 변환 (또는 나갈 때 변환)
처리 위치 Gateway(L7) Kafka Connect Layer
장점 - API 서버가 가벼워짐 (변환된 데이터만 전달)
- 다양한 외부 API 호출이나 전처리 가능- 실시간으로 요청 흐름을 제어 가능
- API 서버는 신경 안 써도 됨
- Kafka 메시지를 나중에 여러 방식으로 재가공 가능
- Source/Sink Connector에만 적용하면 됨 (유연)
단점 - Lua 코드 직접 작성해야 함
- 변환 실패 시 요청 흐름에 영향 줄 수도 있음
- 관리 복잡 (플러그인/스크립트 관리 필요)
- Kafka Connect 환경 필수
- Kafka 적재 전까지 변환 안 되므로 실시간 API 응답 제어 불가
- 복잡한 변환은 SMT Custom 개발 필요
운영 부담 APISIX Lua 플러그인/스크립트 관리 Kafka Connect SMT 설정/운영 관리
성능 빠르지만 Lua 스크립트 최적화 필요 Kafka Connect가 대용량 스트림을 안정적으로 처리 가능
추천 상황 - API 응답을 가볍게 만들고 싶다
- Kafka 외에도 외부 API로도 변환 결과 보내고 싶다
- 실시간 요청 흐름 수정이 필요하다
- 대량 데이터 스트림 변환 필요
- Kafka 내부 데이터 가공 및 일괄처리가 중요
- API 서버는 최소화, Kafka 쪽에서 변환 통합하고 싶다

🎯 요약

"APISIX Lua는 API Gateway에서 실시간으로 변환하고",
"Kafka Connect SMT는 Kafka 데이터 스트림을 배치 또는 스트림 중에 변환한다."

📈 실제 예시 

📍 APISIX Lua 변환 예시

-- 요청 JSON에서 특정 필드 제거하고 Kafka로 전송
local cjson = require("cjson")
ngx.req.read_body()
local body_data = ngx.req.get_body_data()
local parsed = cjson.decode(body_data)

parsed["internalField"] = nil -- 내부 필드 제거

local body_json = cjson.encode(parsed)

-- Kafka Proxy로 전송
local httpc = require("resty.http").new()
httpc:request_uri("http://kafka-producer", {
    method = "POST",
    body = body_json,
    headers = { ["Content-Type"] = "application/json" },
})
  • 요청 본문 수정 (ex: 보안/정책적으로 필요)
  • 외부 시스템에도 전송 가능 (ex: 알림 시스템 연동)

📍 Kafka Connect SMT 변환 예시

Kafka Connect Source Connector 설정:

{
  "name": "http-source-connector",
  "config": {
    "connector.class": "io.confluent.connect.http.HttpSourceConnector",
    "transforms": "InsertField",
    "transforms.InsertField.type": "org.apache.kafka.connect.transforms.InsertField$Value",
    "transforms.InsertField.static.field": "source",
    "transforms.InsertField.static.value": "apisix-http",
    "kafka.topic": "events-topic"
  }
}
  • Kafka로 들어오는 데이터에 "source": "apisix-http" 필드 자동 추가
  • JSON 가공이나 필드 추가/제거 가능
  • 변환 실패해도 Kafka Connect DLQ(Dead Letter Queue)로 넘길 수 있음

 

사용 상황  추천 방법
실시간 요청 수정 + 외부 서버 호출 필요 APISIX Lua 변환
Kafka 데이터 후처리(적재 전 가공) Kafka Connect SMT 변환
둘 다 필요 (API+Kafka 다 최적화) APISIX + Kafka Connect 조합

🎯 결론

둘 다 역할이 다릅니다.

  • APISIX Lua = "HTTP 레벨에서 제어" (API Gateway → 빠른 응답 제어, 다수 시스템 전송)
  • Kafka Connect SMT = "Kafka 스트림 레벨에서 제어" (대량 데이터 후처리, 안정성 위주)

 

728x90