Contribution · Apache Kafka · Kafka Connect

Apache Kafka — ByteBuffer remaining-bytes 시리즈

Kafka Connect 전반에 퍼져 있던 ByteBuffer.array() 오용을 추적해 4개 컴포넌트에 같은 계열의 일관된 수정을 분리해서 올렸습니다. 직접 버퍼와 슬라이스 버퍼 양쪽에서 안전하게 동작하도록 BYTES 처리를 전부 position()/remaining() 기반으로 통일.

문제

Kafka Connect의 BYTES 타입 처리 곳곳에서 buffer.array()를 그대로 사용해 ByteBuffer의 position/limit를 무시하고 전체 backing array를 읽어들이는 패턴이 발견됐습니다. 직접 할당된 버퍼에서는 우연히 동작하지만, slice된 버퍼·duplicate된 버퍼·readonly view에서는 자기 영역 밖 데이터를 함께 직렬화해 잘못된 BYTES 값을 만들어냅니다. Kafka의 BYTES 계약은 "현재 위치부터 remaining 만큼"이라는 것이 문서화되어 있는데 구현이 따라가지 못한 채로 있었습니다.

수정 방향

4개 컴포넌트(Struct, JsonConverter, Cast SMT, Offset Backing Stores)에서 각각 같은 패턴의 패치를 분리해서 제출했습니다. 분리 이유는 컴포넌트마다 메인테이너/리뷰어가 다르고, 영향 범위가 달라 별도 머지/되돌리기가 가능해야 한다는 판단.

PR 목록

관련 자료