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

6.5 KiB
Raw Blame History

Logi-KafkaManager 中的 Kafka-Gateway 模块介绍

[TOC]

1、前言

在介绍Kafka-ManagerKafka-Gateway相关模块之前,我们来先看几个问题以加深对本次分享内容的理解。

问题一:滴滴Kafka-Gateway的能力是什么?

滴滴Kafka-Gateway的主要能力有以下三点:

  1. 应用 + Topic + 发送or消费 粒度的鉴权能力;
  2. 应用 + Topic + 发送or消费 粒度的流控能力;
  3. 服务发现以及服务发现本身具备的多维度的服务降级能力;

问题二:滴滴Kafka-Gateway是怎么实现的?

这个问题比较大,嘴皮子说说主要就是怎么对每个请求做鉴权及流控,然后另外一点是权限及流控元信息的存储。

  1. 每个请求的鉴权及流控的实现是被嵌入于Kafka-Broker中实现。
  2. 权限及流控的元信息分别被存储于MySQLZookeeper中。

问题三:上面两个问题和我们今天分享的内容有什么关系?

Logi-KafkaManager本身除了会作为一个一站式的监控&运维管控平台之外,还会作为Kafka-Gateway里的应用及权限的存储地,Kafka-Gateway会定时通过接口从Kafka-Manager同步应用及权限信息。

此外,刚刚说到Logi-KafkaManager本身也是一站式的监控&运维管控平台,因此Kafka-Manager也会对存储于ZK中的流控信息进行操作。

下面我们正式开始详细的介绍Logi-KafkaManagerKafka-Gateway相关能力的具体实现。

2、Logi-KafkaManager 概要介绍

在具体介绍Logi-KafkaManagerKafka-Gateway之前,我们先看一下Kafka-Manager的架构及整体模块的介绍,以便加深对其中的Kafka-Gateway模块的实现的理解。

2.1、整体架构

km-arch

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

 

Kafka-Gateway核心模块的代码位置 kafka-gateway-core

 

API接口大全-Swagger接口 kafka-gateway-swagger

  每个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

然后我们再结合代码,看一下创建的具体过程

步骤一页面审批Topic申请工单

kafka_create_topic

步骤二接口收到Topic审批请求

所有的工单处理,入口都在这个地方。

kafka_receive_request

步骤三开始创建Topic

kafka_start_create_topic

步骤四创建Topic

kafka_start_create_topic

步骤五:增加权限与配额

kafka_start_create_topic

4、总结

介绍了一下Logi-KafkaManager 中的 Kafka-Gateway 模块的功能以及相关代码的位置并以DEBUG方式跟踪查看了一下Topic创建的详细流程。

剩余的比如权限的增加、应用的增加等流程,大家有兴趣的也可以跟踪一下,以加深对整体代码的理解。