아파치 카프카 도커 이미지

Victor Park
SPITHA Blog
Published in
5 min readOct 19, 2023

by JW. Song

클라우드 네이티브 전환이 유행함에 따라 쿠버네티스를 기반으로 하는 컨테이너 플랫폼이 대세를 이루고 있다. 이에 따라 매우 중요 데이터 저장소인 데이터베이스 시스템마저도 컨테이너로 배포하여 사용하는 사례가 자주 목격이 된다. 또한, 컨테이너와 더불어 마이크로 서비스 아키텍처(MSA)가 새로운 아키텍처로 자리 잡으면서 대용량의 데이터베이스를 서비스별로 분해하여 작은 컨테이너로 구성하고 있다.

마이크로 서비스 아키텍처나 이벤트 드리븐 아키텍처에서 각 애플리케이션 사이에 느슨한 연결을 위해 메시징 시스템은 반드시 필요하며 그중에서도 카프카는 관심도가 매우 높은 편이다. 클라우드 네이티브 환경에서 카프카마저도 컨테이너로 배포하여 사용하는 사례는 매우 많으나 현재 아파치 카프카에서 공식적으로 배포되는 도커 이미지가 없어서 주로 bitnami 혹은 strimzi에서 제작한 도커 이미지를 사용하고 있다.

이에 따라 [KIP-975]에서는 JVM 기반의 아파치 카프카 도커 이미지를 제작하여 공식적인 채널을 통해 배포하는 것을 목표로 논의 하고 있다.

Docker Image for Apache Kafka

Motivation

Docker는 배포가 간편해 개발자들 사이에서 널리 채택되는 도구이다. Hadoop, Spark, Flink와 같은 인기 있는 Apache 프로젝트는 도커 이미지를 게시하고 있다. 그러나 Apache Kafka에는 현재 공식적인 도커 이미지가 없다. [KIP-975]ASF 도커 프로파일을 통해 JVM 기반 아파치 카프카 도커 이미지를 퍼블리싱하는 것을 목표로 하고 있다.

공개 내용

  • 모든 Apache Kafka 릴리스에 대한 도커 이미지
  • 샘플 docker-compose.yml
  • 빠른 시작 예제
  • 공개 문서 추가

제안된 변경 사항

  • 모든 Apache Kafka 릴리즈에 도커 이미지가 추가 아티팩트로 제공
  • 도커 이미지는 JVM 기반 Kafka로 구성되며 Linux 기반 AMD 및 ARM 아키텍처를 지원
  • 각 태그에 대한 새로운 도커 이미지에 대해 실행되도록 기존 Kafka 시스템 테스트 프레임워크를 확장
  • Apache CI/CD 파이프라인을 확장하여 ASF 도커 프로필을 통해 새 도커 이미지를 퍼블릭 도커허브에 게시

Scala 버전

현재 Kafka는 Scala 버전에 따라 2.12와 2.13의 두 가지 바이너리를 지원하지만, Scala 2.13에 대해서만 Docker Image를 제공할 예정

  • 유지 관리 오버헤드 감소
  • Apache Kafka에서 권장
  • Scala 버전 2.12가 포함된 Docker 이미지가 필요한 경우, 제공된 `Dockerfile`에 지정된 Apache Kafka tar 파일 이름을 수정하여 편리하게 생성할 수 있음

JAVA 버전

  • Apache Kafka에서 지원하는 최신 JAVA만 지원
  • Apache Kafka는 이미 JAVA 21로 빌드 및 테스트 되고 있음
  • 다음 릴리즈인 릴리즈 3.7.0에서는 Apache Kafka가 공식적으로 지원되는 버전 중 하나로 JAVA 21이 포함될 예정
  • 따라서 저희는 도커 이미지에서 JAVA 21을 지원할 예정임

사용자가 다른 Java 버전이 포함된 Docker 이미지를 원하면 어떻게 하나요?

  • 대체 Java 버전이 포함된 Docker 이미지를 원하는 사용자의 경우, Atlassian에서 제공하는 Dockerfile을 활용하여 유연하게 자체 Docker 이미지를 빌드할 수 있음. Atlassian 문서에서 다양한 Java 버전에 대해 지정된 기본 이미지에 대한 명확한 지침을 제공할 예정
  • Apache Kafka 마이너 릴리즈의 일부로 Java 메이저 버전을 업데이트할 예정. 이는 브로커와 함께 브로커 플러그인을 포함하는 사용자가 사용자 정의 이미지를 사용하여 Java 업그레이드로 인해 사용자 정의 코드가 손상되지 않도록 해야 한다는 의미임.

Docker 기본 이미지

아파치 카프카를 실행하려면 Docker 이미지에 JDK가 아닌 JRE만 필요하며 도커 이미지의 기본 이미지로 eclipse-temurin:<JRE-version>을 사용하기로 함

  • 이 기본 이미지는 평판이 좋은 기관에서 관리하고 있는 JAVA JRE에 가장 적합한 이미지 중 하나임
  • Flink는 이클립스 테무린 베이스 이미지를 사용하여 진위를 확인하고 신뢰도를 높였음
  • 이 이미지는 ARM64와 AMD64를 모두 지원함
  • JRE이기 때문에 이미지 크기가 263MB로 가벼움

Image 네이밍

  • 패키징된 카프카 버전을 투명하게 전달해야 함
  • 전용 Docker 릴리스가 필요한 CVE/버그가 발생하는 경우에도 위의 사항을 유지해야 함

설명된 제약 조건에 따라 이미지 태그는 다음 형식을 따를 수 있다.

<이미지 이름>:<카프카 버전>-<선택적 접미사>

  • 예를 들어, 3.5.1 버전의 kafka의 경우, 태그가 포함된 이미지 이름은 kafka:3.5.1이 된다.
    - kafka:3.5.1–1 도커 전용 릴리즈의 경우, 접미사 -1을 추가

--

--