AKHQ:用于Apache Kafka管理主题、主题数据、消费者组、模式注册表、连接等的Kafka GUI。。。
参考文章:https://www.5axxw.com/wiki/content/q7nyiuAKHQ(以前称为KafkaHQ)用于Apache Kafka管理主题、主题数据、消费者组、模式注册表、连接等的Kafka GUI。。。ContentsFeaturesQuick Preview使用Helm安装Docker单机版Kubernetes配置JVM.options文件Kafka集群AKHQ安全服务
参考文章:https://www.5axxw.com/wiki/content/q7nyiu
AKHQ(以前称为KafkaHQ)
用于Apache Kafka管理主题、主题数据、消费者组、模式注册表、连接等的Kafka GUI。。。
Contents
- Features
- Quick Preview
- 使用Helm安装Docker单机版Kubernetes
- 配置JVM.options文件Kafka集群AKHQ安全服务器Micronaut
- Api
- Monitoring Endpoint
- Development Environment
- 谁在用AKHQ
Features
- General使用现代Kafka集群(1.0+)连接标准或ssl,sasl集群多集群
- 主题列表配置视图分区视图ACL视图使用者组分配视图节点负责人和分配视图创建主题配置主题删除主题
- 浏览主题数据查看数据、偏移量、键、时间戳和标题自动反序列化使用架构注册表配置编码的avro消息查看日志视图删除记录排序视图筛选器每个分区筛选器具有起始时间筛选器数据的搜索字符串
- 消费者组(仅适用于kafka内部存储器,不适用于旧Zookeeper)列表,带有lag、主题分配、分区视图和lag ACL视图、节点引线和分配视图显示活动和挂起的消费者组删除消费者组更新消费组偏移到开始/结束/时间戳
- 架构注册表列表架构创建/更新/删除架构视图并删除单个架构版本
- 连接列表连接定义创建/更新/删除定义暂停/恢复/重新启动定义或任务
- 节点列表配置视图日志视图配置节点
- ACLS列表主体列表主体主题和组ACL
- 身份验证和角色只读模式BasicHttp(每个用户用户组的角色)配置使用regexp过滤当前组的主题Ldap配置以匹配AKHQ组/角色
New React UI
Release0.15.0
引入了一个基于React的新UI。当你到达AKHQ时,这是默认值。
旧版本仍然可以在路径/{cluster}/topic
上使用,但将在0.16.0
发布时删除。
由于这是一个重大的返工,新的用户界面可能会有一些问题,所以请报告任何问题,谢谢!
Quick preview
- 下载docker-compose.yml文件
- 运行
docker-compose pull
以确保拥有最新版本的AKHQ - 运行
docker-compose up
- 去http://localhost:8080个
它将启动一个Kafka节点、一个Zookeeper节点、一个Schema注册表、一个Connect、填充一些示例数据、启动一个consumer组和一个Kafka流并启动AKHQ。
Installation
首先,您需要一个配置文件来配置AKHQ与Kafka代理的连接。
Docker
docker run -d \
-p 8080:8080 \
-v /tmp/application.yml:/app/application.yml \
tchiotludo/akhq
- With
-v /tmp/application.yml
必须是配置文件的绝对路径 - 去http://localhost:8080个
Stand Alone
- 安装Java 11
- 在发布页面下载最新的jar
- 创建配置文件
- 使用
java -Dmicronaut.config.files=/path/to/application.yml -jar akhq.jar
启动应用程序 - 去http://localhost:8080个
在Kubernetes跑步(使用头盔图表)
使用Helm存储库
- 添加AKHQ helm charts存储库:
helm repo add akhq https://akhq.io/
- Install it:
helm install --name akhq akhq/akhq
Requirements
- 图表版本>=0.1.1要求Kubernetes版本>=1.14
- 图表版本0.1.0可以在以前的Kubernetes版本上运行
helm install --name akhq akhq/akhq --version 0.1.0
Using git
- 克隆存储库:
git clone https://github.com/tchiotludo/akhq && cd akhq/deploy/helm/akhq
- 更新位于deploy/helm/values.yaml
configuration
中的helm值将包含您可以在application.example.yml中找到的所有相关配置,并将存储在ConfigMap
secrets
中。这些值将包含您可以在application.example.yml中找到的所有敏感配置(带有凭据),并将存储在Secret
中。两个值将在启动时合并 - 应用图表:
helm install --name=akhq-release-name .
Configuration
默认情况下,可以在Java属性、YAML、JSON或Groovy文件中提供配置文件。YML配置文件示例如下:应用程序.example.yml
传递自定义Java选项
默认情况下,docker容器允许自定义jvn选项来设置环境变量JAVA_OPTS
。例如,如果要更改默认的timezome,只需添加-e "JAVA_OPTS=-Duser.timezone=Europe/Paris"
使用另一个jvm.options文件运行
默认情况下,docker容器将使用jvm.options文件运行,您可以使用自己的环境变量覆盖它。使用JVM_OPTS_FILE
环境变量,您可以通过传递文件的路径来重写jvm.options文件。
使用docker运行重写JVM_OPTS_FILE
:
docker run -d \
--env JVM_OPTS_FILE={{path-of-your-jvm.options-file}}
-p 8080:8080 \
-v /tmp/application.yml:/app/application.yml \
tchiotludo/akhq
用docker-compose重写JVM_OPTS_FILE
:
version: '3.7'
services:
akhq:
image: tchiotludo/akhq-jvm:dev
environment:
JVM_OPTS_FILE: /app/jvm.options
ports:
- "8080:8080"
volumes:
- /tmp/application.yml:/app/application.yml
如果不重写JVM_OPTS_FILE
,docker容器将使用默认值。
Kafka集群配置
akhq.connections
是一个键值配置,其中:key
:必须是url友好的(字母、数字、。。。这里不允许使用点)字符串标识您的集群(my-cluster-1
和my-cluster-2
是上面的示例)properties
:在Kafka消费者文档中找到的所有配置。最重要的是bootstrap.servers
,它是主机:港口你的卡夫卡经纪人。schema-registry
:(可选)url
:schema registry urlbasic-auth-username
:schema registry basic auth usernamebasic-auth-password
:schema registry basic auth passwordproperties
:注册表客户端的所有配置,尤其是ssl配置connect
:(可选列表,将每个连接器定义为列表的一个元素)name
:连接名称url
:connect urlbasic-auth-username
:connect基本身份验证用户名basic-auth-password
:连接基本身份验证密码ssl-trust-store
:/app/truststore.jksssl-trust-store-password
:trust-store-passwordssl-key-store
:/app/truststore.jksssl-key-store-password
:key-store-password
具有基本身份验证的SSL Kafka群集
kafka群集的配置示例由ssl保护,用于saas提供商,如aiven(完整https和基本身份验证):
您需要从pem生成jks&p12文件,saas提供商提供的cert文件。
openssl pkcs12 -export -inkey service.key -in service.cert -out client.keystore.p12 -name service_key
keytool -import -file ca.pem -alias CA -keystore client.truststore.jks
配置如下例所示:
akhq:
connections:
ssl-dev:
properties:
bootstrap.servers: "{{host}}.aivencloud.com:12835"
security.protocol: SSL
ssl.truststore.location: {{path}}/avnadmin.truststore.jks
ssl.truststore.password: {{password}}
ssl.keystore.type: "PKCS12"
ssl.keystore.location: {{path}}/avnadmin.keystore.p12
ssl.keystore.password: {{password}}
ssl.key.password: {{password}}
schema-registry:
url: "https://{{host}}.aivencloud.com:12838"
basic-auth-username: avnadmin
basic-auth-password: {{password}}
properties: {}
connect:
- name: connect-1
url: "https://{{host}}.aivencloud.com:{{port}}"
basic-auth-username: avnadmin
basic-auth-password: {{password}}
AKHQ configuration
Pagination
akhq.pagination.page-size
每页的主题数(默认值:25)
Topic List
akhq.topic.default-view
是默认列表视图(ALL,HIDE_INTERNAL,HIDE_INTERNAL_STREAM,HIDE_STREAM)akhq.topic.internal-regexps
是要被视为内部的regexp列表(不能删除或更新内部主题)akhq.topic.stream-regexps
是作为内部流主题的regexp列表akhq.topic.skip-consumer-groups
显示主题时禁用加载使用者组信息(true
),默认情况下加载信息
主题创建默认值
这些参数是主题创建页面中使用的默认值。
akhq.topic.retention
默认保留时间(毫秒)akhq.topic.replication
要使用的默认副本数akhq.topic.partition
默认分区数
Topic Data
akhq.topic-data.sort
:默认排序顺序(最早、最新)(默认:最早)akhq.topic-data.size
:每页的最大记录数(默认值:50)akhq.topic-data.poll-timeout
:如果缓冲区中没有数据可用,则在轮询中等待的时间(毫秒)(默认值:1000)。
Security
akhq.security.default-group
:所有用户的默认组,甚至是未登录的用户。默认情况下,默认组是admin
,允许您对整个应用程序进行读/写访问。
默认情况下,默认启用security&roles,但匿名用户具有完全访问权限。您可以使用micronaut.security.enabled: false
完全禁用安全性。
如果需要read-only应用程序,只需将其添加到配置文件中:
akhq:
security:
default-group: reader
Auth
Groups
组允许您限制用户
为用户定义具有特定角色的组
akhq.security.default-group
:所有用户的默认组,即使是未登录的用户akhq.security.groups
:Groups list definitiongroup-name
:组标识符roles
:组的角色列表attributes.topics-filter-regexp
:Regexp以筛选当前组可用的主题
3个默认组可用:
admin
好的reader
在所有AKHQ上只有读访问权限no-roles
没有任何角色,强制用户登录
Basic Auth
akhq.security.basic-auth
:列出受影响角色的用户和密码actual-username
:当前用户作为yaml密钥登录(可以是email、Login、…)password
:sha256中的密码,可以使用命令echo -n "password" | sha256sum
groups
:Groups for current user进行转换
请注意,basic auth将使用服务器内存中的会话存储。如果实例位于反向代理或负载平衡器之后,则需要转发名为
SESSION
的会话cookie和/或使用session粘性
LDAP
配置如何在AKHQ组中匹配ldap组
akhq.security.ldap.group
:Ldap groups listldap-group-name
:Ldap组名(与Ldap中的名称相同)groups
:AKHQ group list要用于当前Ldap组
使用联机ldap测试服务器的示例
在micronaut中配置ldap连接
micronaut:
security:
ldap:
default:
enabled: true
context:
server: 'ldap://ldap.forumsys.com:389'
managerDn: 'cn=read-only-admin,dc=example,dc=com'
managerPassword: 'password'
search:
base: "dc=example,dc=com"
groups:
enabled: true
base: "dc=example,dc=com"
如果要对LDAP服务器启用匿名身份验证,可以传递:
managerDn: ''
managerPassword: ''
可以使用调试ldap连接
curl -i -X POST -H "Content-Type: application/json" \
-d '{ "configuredLevel": "TRACE" }' \
http://localhost:8080/loggers/io.micronaut.configuration.security
配置AKHQ组和Ldap组和用户
akhq:
security:
groups:
topic-reader: # just a key, no matter will be override by name below
name: "topic-reader" # Group name
roles: # roles for the group
- topic/read
attributes:
# Regexp to filter topic available for group
topics-filter-regexp: "test\\.reader.*"
topic-writer: # just a key, no matter will be override by name below
name: "topic-writer" # Group name
roles:
- topic/read
- topic/insert
- topic/delete
- topic/config/update
attributes:
topics-filter-regexp: "test.*"
ldap:
group:
mathematicians:
groups:
- topic-reader
scientists:
groups:
- topic-reader
- topic-writer
user:
franz:
groups:
- topic-reader
- topic-writer
Server
micronaut.server.context-path
:如果在反向代理后面,则使用尾部斜杠(可选)指向akhq的路径。示例:akhq位于一个反向代理后面,url为http://my-server/akhq,setbase-path:“/akhq/”。如果您在子域http://akhq.my-server的反向代理后面,则不需要/
Kafka admin/producer/consumer默认属性
akhq.clients-defaults.{{admin|producer|consumer}}.properties
:管理生产者或消费者的默认配置。卡夫卡文档中的所有属性都可用。
Micronaut configuration
由于AKHQ基于Micronaut,您可以使用Micronaut配置自定义配置(服务器端口、ssl…)。更多信息可在Micronaut文档中找到
Docker
AKHQ docker image支持3个环境变量来处理配置:
AKHQ_CONFIGURATION
:一个字符串,包含将在容器的/app/configuration.yml上写入的yml中的完整配置。MICRONAUT_APPLICATION_JSON
:包含JSON格式的完整配置的字符串MICRONAUT_CONFIG_FILES
:容器上配置文件的路径。默认路径是/app/application.yml
如何挂载配置文件
安装配置文件时要小心,不要删除/app上的akhq文件。您需要显式地挂载/app/application.yml
,而不是挂载/app
目录。这将删除AKHQ binnaries并给出以下错误: /usr/local/bin/docker-entrypoint.sh: 9: exec: ./akhq: not found
volumeMounts:
- mountPath: /app/application.yml
subPath: application.yml
name: config
readOnly: true
Api
我们提供了一个实验性的api,允许您通过api获取AKHQ上公开的所有内容。
请注意,这个api是实验性的,在将来的版本中会发生变化。有些端点暴露了太多的数据并且获取速度很慢,为了更快,我们将在将来删除一些属性。
示例:列出主题endpoint expose log dir,consumer groups,offset。获取所有的论文目前是缓慢的,我们将在将来删除这些。
您可以在此处发现api端点:
/api
:RapiDoc网页,记录所有端点。/swagger/akhq.yml
:完整的OpenApi规范文件
Monitoring endpoint
默认情况下启用多个监视端点。您可以禁用它,或者只对以下micronaut配置下的经过身份验证的用户限制访问。
/info
Info端点,包含git状态信息。/health
健康终结点/loggers
记录器终结点/metrics
度量终结点/prometheus
普罗米修斯终结点
调试AKHQ性能问题
您可以使用以下命令从AKHQ调试所有查询持续时间
curl -i -X POST -H "Content-Type: application/json" \
-d '{ "configuredLevel": "TRACE" }' \
http://localhost:8080/loggers/org.akhq
Development Environment
早期开发映像
您可以访问docker dev image自动构建在标签dev
上的最后一个特性/错误修复
docker pull tchiotludo/akhq:dev
dev-jar不是在GitHub上发布的,您有两个解决方案可以使用dev
jar:
从docker图像中获取
docker pull tchiotludo/akhq:dev
docker run --rm --name=akhq -it tchiotludo/akhq:dev
docker cp akhq:/app/akhq.jar .
或者用./gradlew shadowJar
构建它,jar将位于build/libs/akhq-*.jar
Development Server
提供docker-compose来启动开发环境。只需安装docker&docker-compose,克隆存储库并发出一个简单的docker-compose -f docker-compose-dev.yml up
来启动一个开发服务器。Dev-server是一个java服务器&webpack-dev-server,具有实时重新加载功能。
谁在用AKHQ
- Adeo
- Auchan Retail
- Bell
- BMW Group
- Boulanger
- GetYourGuide
- Klarna
- La Redoute
- Leroy Merlin
- NEXT Technologies
- Nuxeo
- Pipedrive
- BARMER
Credits
非常感谢:
- 免费开放源码许可证。
- Apache、Apache Kafka、Kafka和相关的开源项目名称是Apache Software Foundation的商标。AKHQ不隶属于Apache软件,也不与Apache软件有关联。
更多推荐
所有评论(0)