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 목록
- PR #22536 KAFKA-20656 — Struct honors ByteBuffer remaining bytes open
- PR #22535 KAFKA-20666 — Offset backing stores honor ByteBuffer remaining bytes open
관련 자료
- Projectapache/kafka
- Authorgithub.com/BK202503
- OtherSpring Kafka — suspend listener retry 회귀 수정
- Blogdevbilllab.tistory.com