一文搞懂 Kafka 开源可视化 Web UI - Kafdrop

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Hello folks,我是 Luga,今天我们来分享一下与 Kafka 有关的观测性话题- Kafdrop。作为一个构建在 Spring Boot 之上的免费 Web UI工具,越来越受到广大技术人员的喜好。


    Hello folks,我是 Luga,今天我们来分享一下与 Kafka 有关的观测性话题-
Kafdrop。作为一个构建在 Spring Boot 之上的免费 Web UI工具,越来越受到广大技术人员的喜好。

01

背景概述

    Kafdrop 是一个 Apache 2.0 许可项目,作为一款 Apache Kafka Web UI 可视化工具,在无数的开源选项中,Kafdrop 以其简单、快速和易于使用而脱颖而出。同时,它是一个开源 Web 项目,允许查看来自 Kafka 代理的信息,如现有主题、消费者,甚至是发送的消息内容。

    那么,Kafdrop到底有什么可圈可点的优势呢?接下来,我们来简要看一下 Kafdrop 的核心功能,具体如下所示:

    1、查看 Kafka 代理 -主题和分区分配以及控制器状态

    2、查看主题 -分区数,复制状态和自定义配置

    3、浏览消息 -JSON,纯文本和 Avro 编码

    4、查看消费者组 -每个分区的停放偏移量,合并延迟和每个分区滞后

    5、创建新主题

    6、查看 ACL 等

02

基于 Docker 运行

   通常情况下,若基于 Docker 容器引擎运行 Kafdrop 组件,我们可采用如下 2 种方式启动。

    1、后台直接运行


[leonli@Leon ~ ] % docker run -d --rm -p 19000:9000 \
    -e KAFKA_BROKERCONNECT=<host:port,host:port> \
    -e JVM_OPTS="-Xms32M -Xmx64M" \
    -e SERVER_SERVLET_CONTEXTPATH="/" \
    obsidiandynamics/kafdrop


    2、基于 Protobuff 定义在后台运行


[leonli@Leon ~ ] % docker run -d --rm -v <path_to_protobuff_descriptor_files>:/var/protobuf_desc -p 19000:9000 \
    -e KAFKA_BROKERCONNECT=<host:port,host:port> \
    -e JVM_OPTS="-Xms32M -Xmx64M" \
    -e SERVER_SERVLET_CONTEXTPATH="/" \
    -e CMD_ARGS="--message.format=PROTOBUF --protobufdesc.directory=/var/protobuf_desc" \
    obsidiandynamics/kafdrop

    针对上述的 2 种不同参数方式运行后,我们可以通过 http://localhost:19000访问 Web UI。

03

基于 Kubernetes 运行

    这里,我们分别基于 Helm 以及 Kubernetes Manifest file 进行部署安装,具体可参考如下。

    基于 Helm 部署

    1、获取代码仓库

[leonli@Leon ~ ] % git clone https://github.com/obsidiandynamics/kafdrop && cd kafdrop
Cloning into 'kafdrop'...
remote: Enumerating objects: 4502, done.
remote: Counting objects: 100% (35/35), done.
remote: Compressing objects: 100% (33/33), done.
Receiving objects:   4% (181/4502), 36.00 KiB | 4.00 KiB/s
...

    2、执行安装

[leonli@Leon kafdrop ] % helm upgrade -i kafdrop chart --set image.tag=3.x.x \
    --set kafka.brokerConnect=<host:port,host:port> \
    --set server.servlet.contextPath="/" \
    --set cmdArgs="--message.format=AVRO --schemaregistry.connect=http://localhost:8080" \ #optional
    --set jvm.opts="-Xms32M -Xmx64M" 

    基于 Manifest file 部署

    1、编写 kafdrop-deployment.yaml

[leonli@Leon ~ ] % vi kafdrop-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-kafdrop-deployment
  namespace: "kafdrop"
  labels:
    app: kafka-kafdrop
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka-kafdrop
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: kafka-kafdrop
    spec:
      volumes:
        - name: tz-config
          hostPath:
            path: /usr/share/zoneinfo/Asia/Kolkata
      containers:
        - image: obsidiandynamics/kafdrop
          imagePullPolicy: Always
          name: kafka-kafdrop
          volumeMounts:
            - name: tz-config
              mountPath: /etc/localtime
          resources:
            limits:
              cpu: 200m
              memory: 1Gi
            requests:
              cpu: 200m
              memory: 1Gi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          ports:
            - containerPort: 5010
              name: server
            - containerPort: 5012
              name: jmx
          env:
            - name: JVM_OPTS
              value: "-Xms512M -Xms512M"
            - name: SERVER_SERVLET_CONTEXTPATH
              value: "/"
            - name: KAFKA_BROKERCONNECT
              value: "<kafka_broker_ip>:9092"
      restartPolicy: Always

    2、进行创建及部署

[leonli@Leon ~ ] % kubectl apply -f kafdrop-deployment.yaml

    通常情况下,主题的创建和删除默认通过 KafDrop 启用的。因此,如果要禁用主题创建和删除功能,那么,我们需要在 YAML 文件的 env 部分添加以下内容,具体如下所示:

- name: CMD_ARGS  
value: "--topic.deleteEnabled=false --topic.createEnabled=false"

    若要从本地计算机的浏览器访问 Kafdrop UI,我们需要创建一个 Kubernetes 服务,该服务将指向在上一步中创建的 Deployment。在其中创建 kafdrop-service.yaml并添加以下参数:

---
apiVersion: v1
kind: Service
metadata:
  name: kafka-kafdrop-service
  namespace: "kafdrop"
  labels:
    app: kafka-kafdrop
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
spec:
  ports:
    - protocol: "TCP"
      port: 9000
      name: server
  selector:
    app: kafka-kafdrop
  type: LoadBalancer

    然后进行如下操作,具体可参考:

[leonli@Leon ~ ] % kubectl apply -f kafdrop-service.yaml

   等待服务启动后,我们可以从浏览器访问 Kafdrop UI ,至此,基于 Kubernetes 的 2种部署方式解析完成,接下来将是工具的操作使用。

04

kafdrop 操作指南

    在完成上述的部署操作后,我们通过访问 http://localhost:19000 进入 Kafdrop GUI 窗体,具体可参考:

    此页面显示了整个 Kafka 集群所有相关的信息,例如,Topic(主题)总数、Topic(主题)名称、Partitions(分区)、Broker(代理)详细信息等详细信息等。同时,随着集群规模和主题(以及分区)数量的增长,我们通常希望看到集群中的分区大致呈水平分布,以评估当前集群的性能情况,为后续资源配置进行优化。

    此时,我们点击要查看其详细信息的任何 Kafka 主题,它将打开一个页面,其中包含分区计数、复制因子、偏移延迟、复制不足的分区等详细信息,如下图所示:

    这里,我们模拟生产者生产消息,然后去平台对应的 Topic 查看所生产的消息以及消息的相关内容情况,具体如下所示:

bash-4.4# ./kafka-console-producer.sh --broker-list localhost:9092 --topic FLINK_TO_TASK_PROD
>'Merchant-2020-001' Values:'111111111111100000000000000','MerID:20200202020202'
>'Merchant-2020-001' Values:'111111111111100000000000000','MerID:20200202020203'
>'Merchant-2020-001' Values:'111111111111100000000000000','MerID:20200202020205'
>'Merchant-2020-001' Values:'111111111111100000000000000','MerID:20200202020208'
>'Merchant-2020-001' Values:'111111111111100000000000000','MerID:20200202020200'
>'Merchant-2020-001' Values:'111111111111100000000000000','MerID:20200202020207'
>

    此时,我们进入“消息”窗口,这正是我们所期望的——所选分区按时间顺序排列的消息列表。

    每个消息列表都方便地显示偏移量、记录键(如果设置了)、发布时间戳以及生产者可能附加的任何标头。


    除此之外,若消息恰好是有效的 JSON 文档格式,主题查看器可以很好地格式化它。我们可以单击消息左侧的绿色箭头将其展开进行查看,具体如下所示:

    综上所述,Kafdrop 是一款挺出色的工具,允许我们依据实际的业务场景能够查看主题内容、浏览消费者组、查看消费者滞后、主题配置、代理统计信息以及其他相关事件。总而言之,基于其它在填补 Kafka 可观察性工具中的明显空白方面做得非常出色,解决了社区长期以来一直病诟的问题。

    Adiós !

相关文章
|
1月前
|
消息中间件 监控 数据可视化
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
53 2
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
【优秀python web系统毕设】基于python的全国招聘数据分析可视化系统,包括随机森林算法
本文介绍了一个基于Python的全国招聘数据分析可视化系统,该系统利用数据挖掘技术、随机森林算法和数据可视化技术,从招聘网站抓取数据,进行处理、分析和预测,帮助用户洞察招聘市场,为求职者和企业提供决策支持。
138 2
|
3月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
155 1
|
22天前
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
41 0
|
3月前
|
开发框架 JavaScript 前端开发
Web Component -- 即将爆发的原生的 UI 组件化标准
Web Component -- 即将爆发的原生的 UI 组件化标准
|
3月前
|
前端开发 JavaScript C#
C#开发者的新天地:Blazor如何颠覆传统Web开发,打造下一代交互式UI?
【8月更文挑战第28天】Blazor 是 .NET 生态中的革命性框架,允许使用 C# 和 .NET 构建交互式 Web UI,替代传统 JavaScript。本文通过问答形式深入探讨 Blazor 的基本概念、优势及应用场景,并指导如何开始使用 Blazor。Blazor 支持代码共享、强类型检查和丰富的生态系统,简化 Web 开发流程。通过简单的命令即可创建 Blazor 应用,并利用其组件化和数据绑定特性快速搭建界面。无论对于 .NET 还是 Web 开发者,Blazor 都是一个值得尝试的新选择。
126 1
|
3月前
|
数据采集 数据可视化 关系型数据库
【优秀python web设计】基于Python flask的猫眼电影可视化系统,可视化用echart,前端Layui,数据库用MySQL,包括爬虫
本文介绍了一个基于Python Flask框架、MySQL数据库和Layui前端框架的猫眼电影数据采集分析与可视化系统,该系统通过爬虫技术采集电影数据,利用数据分析库进行处理,并使用Echart进行数据的可视化展示,以提供全面、准确的电影市场分析结果。
132 4
|
3月前
|
数据可视化 数据挖掘 持续交付
Axure Web端元件库:从Quick UI到500+组件的飞跃
在快速变化的数字世界中,产品设计不仅仅是功能的堆砌,更是用户体验的精心雕琢。原型设计作为产品开发过程中的关键环节,其重要性不言而喻。Axure,作为业界领先的原型设计工具,凭借其强大的交互设计和丰富的功能,赢得了全球设计师和开发者的信赖。而Axure Web端元件库,则是这一平台上的一颗璀璨明珠,它以超过500个精心设计的组件为基础,为设计师们打开了一扇通往高效、高质量原型设计的大门。
156 0
|
3月前
|
存储 数据可视化 前端开发
Web Audio API 第5章 音频的分析与可视化
Web Audio API 第5章 音频的分析与可视化
|
4月前
|
异构计算 Python
30行代码实现一个带UI界面的图片背景移除工具:并附带web网页
人工智能技术正处于蓬勃发展中,移除图片背景的方法众多,涵盖了各式各样的实现途径和模型。然而,这些方法往往在安装和配置环境方面稍显复杂。今天,介绍一种极其简便的方法——大约30行代码,就能实现这一功能。虽然相比之下可能稍显简单,但对于不太苛刻的需求来说,这种方法颇为方便实用。
下一篇
无影云桌面