Files
KnowStreaming/docs/zh/Kafka分享/Kafka网关_KGW简介/KafkaGatewayWeb简介.md
2023-02-14 14:57:39 +08:00

137 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Logi-KafkaManager 中的 Kafka-Gateway 模块介绍
[TOC]
## 1、前言
在介绍`Kafka-Manager``Kafka-Gateway`相关模块之前,我们来先看几个问题以加深对本次分享内容的理解。
**问题一:滴滴`Kafka-Gateway`的能力是什么?**
滴滴`Kafka-Gateway`的主要能力有以下三点:
1. 应用 + Topic + 发送or消费 粒度的鉴权能力;
2. 应用 + Topic + 发送or消费 粒度的流控能力;
3. 服务发现以及服务发现本身具备的多维度的服务降级能力;
**问题二:滴滴`Kafka-Gateway`是怎么实现的?**
这个问题比较大,嘴皮子说说主要就是怎么对每个请求做鉴权及流控,然后另外一点是权限及流控元信息的存储。
1. 每个请求的鉴权及流控的实现是被嵌入于`Kafka-Broker`中实现。
2. 权限及流控的元信息分别被存储于`MySQL``Zookeeper`中。
**问题三:上面两个问题和我们今天分享的内容有什么关系?**
`Logi-KafkaManager`本身除了会作为一个一站式的监控&运维管控平台之外,还会作为`Kafka-Gateway`里的应用及权限的存储地,`Kafka-Gateway`会定时通过接口从`Kafka-Manager`同步应用及权限信息。
此外,刚刚说到`Logi-KafkaManager`本身也是一站式的监控&运维管控平台,因此`Kafka-Manager`也会对存储于`ZK`中的流控信息进行操作。
下面我们正式开始详细的介绍`Logi-KafkaManager``Kafka-Gateway`相关能力的具体实现。
## 2、Logi-KafkaManager 概要介绍
在具体介绍`Logi-KafkaManager``Kafka-Gateway`之前,我们先看一下`Kafka-Manager`的架构及整体模块的介绍,以便加深对其中的`Kafka-Gateway`模块的实现的理解。
### 2.1、整体架构
![km-arch](./assets/km-arch.png)
### 2.2、模块介绍
| 模块 | 说明 | 详细说明
| :-------- |:--------:| :--------:|
| kafka-manager-console | 前端模块 | KM前端相关的代码
| kafka-manager-common | 公共模块 | 存放公共内容,包括实体类、工具类等等
| kafka-manager-core | 核心模块 | KM的核心模块存放最基本及最重要的功能比如Topic的增删改查等
| kafka-manager-dao | DAO层 | 主要是操作MySQL的相关类
| kafka-manager-extends | 扩展模块 | 非核心模块,可依据实际需要进行扩展
| kafka-manager-account | 扩展模块-登录及用户账号模块 | 默认基于MySQL实现也可以基于自己公司内部的员工系统及登录系统进行扩展实现
| kafka-manager-bpm | 扩展模块-工单流程模块 | 默认基于MySQL实现也可以基于自己公司内部的流程中心进行扩展实现
| kafka-manager-kcm | 扩展模块-Kafka集群升级部署管理模块 | 默认对接夜莺,也可以单独对接自己公司内部的相关系统
| kafka-manager-monitor | 扩展模块-监控告警模块 | 监控告警模块默认对接夜莺,可以单独对接自己内部的监控系统
| kafka-manager-notify | 扩展模块-通知模块 | 基本无默认实现,可以对接自己公司内部的通知系统或者邮件系统
| kafka-manager-openapi | 扩展模块-开放接口 | 相关的开放接口涉及到的服务层都存放在这个地方
| kafka-manager-task | 任务模块 | 基于MySQL实现的任务均衡及抢占式执行模块该模块主要是对集群的指标进行搜集
| kafka-manager-web | Controller层 | 接收外部请求及进行相关控制
## 3、Kafka-Gateway 详细介绍
KM的代码整体上都还是比较简单的因此这块就详细介绍一下相关代码的位置。以及我们结合代码以DEBUG的方式跟踪几个例子具体细节部分可以看代码。
### 3.1、代码结构说明
Kafka-Gateway调用的相关API接口
![kafka-gateway-api](./assets/kafka-gateway-api.jpg)
 
Kafka-Gateway核心模块的代码位置
![kafka-gateway-core](./assets/kafka-gateway-core.jpg)
 
API接口大全-Swagger接口
![kafka-gateway-swagger](./assets/kafka-gateway-swagger.jpg)
 
每个API接口的用途在swagger地址及代码中都做了说明这块有问题的或者觉得哪里不够清晰的可以随时交流。
### 3.2、数据库表说明
创建数据库表及表与表每个字段的说明在kafka-manager源码的`docs/install_guide/create_mysql_table.sql`文件中做了概要说明。这里再补充说明一下gateway相关的表及功能。
| 表 | 功能说明 | 详细说明
| :-------- |:--------:| :--------:|
| app | KM使用的应用表 | app表数据是给KM查询使用的里面包含一些业务信息包括应用的负责人是谁等
| kafka_user | KG使用的应用表 | kafka_user表的数据是提供给Kafka-Gateway查询使用的。与app表的数据基本一致设计两个表的原因是做数据的隔离避免app表的脏数据影响了KG
| authority | KM使用的权限表 | 权限值存储最终的权限,即记录最终权限值
| kafka_acl | KG使用的权限表 | 存储每一次的权限操作点,即增量记录
| gateway_config | gateway相关配置表 | 主要提供给服务发现使用
| topic_connections | Topic连接信息表 | kafka-broker将连接信息上报给kafka-manager之后存储在该表中
| topic_report | 废弃,忽略该功能 | 已废弃
### 3.3、样例演示——增加Topic
我们以在我们平台申请及创建一个Topic为例子讲解整个代码的运行过程。
首先看一下创建Topic的整体流程
**创建Topic的整体流程**
![kafka_create_topic](./assets/kafka_create_topic_flowchat.jpg)
然后我们再结合代码,看一下创建的具体过程
**步骤一页面审批Topic申请工单**
![kafka_create_topic](./assets/debug_handle_topic_order.jpg)
**步骤二接口收到Topic审批请求**
所有的工单处理,入口都在这个地方。
![kafka_receive_request](./assets/debug_receive_request.jpg)
**步骤三开始创建Topic**
![kafka_start_create_topic](./assets/debug_start_create_topic.jpg)
**步骤四创建Topic**
![kafka_start_create_topic](./assets/debug_create_topic.jpg)
**步骤五:增加权限与配额**
![kafka_start_create_topic](./assets/debug_add_quota_and_authority.jpg)
## 4、总结
介绍了一下`Logi-KafkaManager` 中的 `Kafka-Gateway` 模块的功能以及相关代码的位置并以DEBUG方式跟踪查看了一下`Topic`创建的详细流程。
剩余的比如权限的增加、应用的增加等流程,大家有兴趣的也可以跟踪一下,以加深对整体代码的理解。