参考文章: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.yamlconfiguration中的helm值将包含您可以在application.example.yml中找到的所有相关配置,并将存储在ConfigMapsecrets中。这些值将包含您可以在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-1my-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" | sha256sumgroups: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配置下的经过身份验证的用户限制访问。

  • /infoInfo端点,包含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上发布的,您有两个解决方案可以使用devjar:

从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软件有关联。
Logo

开源、云原生的融合云平台

更多推荐