Contribution · Apache Kafka · Kafka Connect

Apache Kafka — ByteBuffer remaining-bytes 시리즈

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

문제

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

수정 방향

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

PR 목록

관련 자료