一文搞懂 Kafka 开源可视化 Web UI - Kafdrop
一文搞懂 Kafka 开源可视化 Web UI - Kafdrop
talkwithtrend
talkwithtrend.com社区(即twt社区)官方公众号,持续发布优秀社区原创内容。内容深度服务企业内各方向的架构师、运维主管、开发和运维工程师等IT专业岗位人群,让您时刻和国内企业IT同行保持信息同步。
【作者】 李杰, 专注于Java虚拟机技术、云原生技术领域的探索与研究,个人公众号“架构驿站”。
背景概述
Kafdrop 是一个 Apache 2.0 许可项目,作为一款 Apache Kafka Web UI 可视化工具,在无数的开源选项中,Kafdrop 以其简单、快速和易于使用而脱颖而出。同时,它是一个开源 Web 项目,允许查看来自 Kafka 代理的信息,如现有主题、消费者,甚至是发送的消息内容。
那么,Kafdrop到底有什么可圈可点的优势呢?接下来,我们来简要看一下 Kafdrop 的核心功能,具体如下所示:
1、查看 Kafka 代理 -主题和分区分配以及控制器状态
2、查看主题 -分区数,复制状态和自定义配置
3、浏览消息 -JSON,纯文本和 Avro 编码
4、查看消费者组 -每个分区的停放偏移量,合并延迟和每个分区滞后
5、创建新主题
基于 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
基于 Kubernetes 运行
[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
: 200
m
memory
: 1
Gi
requests
:
cpu
: 200
m
memory
: 1
Gi
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 操作指南
在完成上述的部署操作后,我们通过访问 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 可观察性工具中的明显空白方面做得非常出色,解决了社区长期以来一直病诟的问题。
欢迎点击文末 阅读原文 到社区原文下讨论交流 觉得本文有用,请 转发 或点击 “赏” ,让更多同行看到
资料/文章推荐:
-
Kafka 多种跨 IDC 灾备方案调研对比
-
Kafka 容错及高可用原理
-
Kafka 容错及高可用测试
欢迎关注社区 “Kafka”技术主题 ,将会不断更新优质资料、文章。地址:
https://www.talkwithtrend.com/Topic/111827/doc
下载 twt 社区客户端 APP
长按识别二维码即可下载
或到应用商店搜索“twt”
长按二维码关注公众号
*本公众号所发布内容仅代表作者观点,不代表社区立场
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
