AKHQ 는 Kafka 클러스터를 웹 화면에서 다루는 관리 도구다. Apache License 2.0 으로 배포되며 기능 제한이나 유상 판이 따로 없다. 토픽 목록과 설정, 메시지 조회, 컨슈머 그룹과 lag, ACL, Schema Registry, Kafka Connect 를 한 화면에서 볼 수 있다.
같은 용도의 도구로 CMAK 이 있으나 오래 전 구조에 머물러 있고, 그 밖의 여러 UI 는 무상 판에 기능 제한을 두는 경우가 있다. 라이선스와 기능 제한을 함께 고려하면 AKHQ 가 무난한 선택이다.
설정 파일 하나만 있으면 된다.
akhq:
connections:
prod-cluster:
properties:
bootstrap.servers: 'broker01.example.com:9092,broker02.example.com:9092,broker03.example.com:9092'
인증이 있는 클러스터라면 클라이언트 속성을 그대로 넣는다.
akhq:
connections:
prod-cluster:
properties:
bootstrap.servers: 'broker01.example.com:9093'
security.protocol: SASL_PLAINTEXT
sasl.mechanism: GSSAPI
sasl.kerberos.service.name: kafka
sasl.jaas.config: >-
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true storeKey=true
keyTab="/app/conf/svcuser.keytab"
principal="svcuser@EXAMPLE.COM";
mkdir -p /opt/akhq
docker run -d --name akhq -p 8080:8080 \
-v /opt/akhq/application.yml:/app/application.yml \
tchiotludo/akhq:latest
docker logs -f akhq
mkdir -p /opt/akhq && cd /opt/akhq
curl -L -o akhq.jar https://github.com/tchiotludo/akhq/releases/latest/download/akhq.jar
java -Dmicronaut.config.files=/opt/akhq/application.yml -jar /opt/akhq/akhq.jar
포트를 바꾸려면 설정 파일에 넣는다.
micronaut:
server:
port: 8085
systemd 유닛으로 등록해 두면 운영이 편하다.
[Unit]
Description=AKHQ
After=network-online.target
[Service]
Type=simple
User=akhq
Environment=JAVA_HOME=/usr/lib/jvm/java-25-openjdk
ExecStart=/usr/lib/jvm/java-25-openjdk/bin/java -Dmicronaut.config.files=/opt/akhq/application.yml -jar /opt/akhq/akhq.jar
Restart=on-failure
[Install]
WantedBy=multi-user.target
오류: 기본 클래스 org.akhq.App을(를) 로드하는 중 LinkageError가 발생했습니다.
java.lang.UnsupportedClassVersionError: org/akhq/App has been compiled by a more recent
version of the Java Runtime (class file version 69.0), this version of the Java Runtime
only recognizes class file versions up to 65.0
클래스 파일 버전과 Java 메이저 버전은 44 만큼 차이가 난다. 즉 65.0 은 Java 21, 69.0 은 Java 25 다. 내려받은 AKHQ 가 Java 25 로 빌드됐는데 실행 환경이 Java 21 이라 읽지 못하는 것이다.
| 클래스 파일 버전 | Java |
|---|---|
| 52.0 | 8 |
| 55.0 | 11 |
| 61.0 | 17 |
| 65.0 | 21 |
| 69.0 | 25 |
해결 방법은 셋이다.
첫째, 실행 환경에 Java 25 를 설치하고 그것으로 띄운다. 다른 애플리케이션과 섞이지 않도록 유닛 파일에서 절대 경로로 지정한다.
둘째, 컨테이너 이미지를 쓴다. 이미지 안에 맞는 런타임이 들어 있으므로 호스트의 Java 버전과 무관하다. 가장 손이 덜 간다.
셋째, 지금 환경의 Java 로 동작하는 이전 릴리스를 받는다. 릴리스 페이지에서 요구 Java 버전을 확인한 뒤 고른다. 다만 보안 수정이 빠질 수 있다.
현재 릴리스가 요구하는 정확한 Java 버전은 배포처의 안내를 확인한다 (확인 필요).
java -version
javap -verbose -cp akhq.jar org.akhq.App | grep 'major version'