KafkaCenter是什么

KafkaCenter是一个针对Kafka的一站式,解决方案。用于Kafka集群的维护与管理,生产者和消费者的监控,以及Kafka部分生态组件的使用。

对于Kafka的平台化,一直缺少一个成熟的解决方案,之前比较流行的kafka监控方案,如kafka-manager提供了集群管理与topic管理等等功能。但是对于生产者、消费者的监控,以及Kafka的新生态,如Connect,KSQL还缺少响应的支持。Confluent Control Center功能要完整一些,但却是非开源收费的。

对于Kafka的使用,一直都是一个让人头疼的问题,由于实时系统的强运维特性,我们不得不投入大量的时间用于集群的维护,kafka的运维,比如:

  • 人工创建topic,特别费力
  • 相关kafka运维,监控孤岛化
  • 现有消费监控工具监控不准确
  • 无法拿到Kafka 集群的summay信息
  • 无法快速知晓集群健康状态
  • 无法知晓业务对team kafka使用情况
  • kafka管理,监控工具稀少,没有一个好的工具我们直接可以使用
  • 无法快速查询topic消息

功能模块介绍

  • Home-> 查看平台管理的Kafka Cluster集群信息及监控信息
  • Topic-> 用户可以在此模块查看自己的Topic,发起申请新建Topic,同时可以对Topic进行生产消费测试。
  • Monitor-> 用户可以在此模块中可以查看Topic的生产以及消费情况,同时可以针对消费延迟情况设置预警信息。
  • Connect-> 实现用户快速创建自己的Connect Job,并对自己的Connect进行维护。
  • KSQL-> 实现用户快速创建自己的KSQL Job,并对自己的Job进行维护。
  • Approve-> 此模块主要用于当普通用户申请创建Topic,管理员进行审批操作。
  • Setting-> 此模块主要功能为管理员维护User、Team以及kafka cluster信息
  • Kafka Manager-> 此模块用于管理员对集群的正常维护操作。

系统截图:

安装与入门

安装需要依赖 mysql es email server

组件 是否必须 功能
mysql 必须 配置信息存在mysql
elasticsearch(7.0+) 可选 各种监控信息的存储
email server 可选 Apply, approval, warning e-mail alert

1、初始化

在MySQL中执行sql建表

  1. -- Dumping database structure for kafka_center
  2. CREATE DATABASE IF NOT EXISTS `kafka_center` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;
  3. USE `kafka_center`;
  4. -- Dumping structure for table kafka_center.alert_group
  5. CREATE TABLE IF NOT EXISTS `alert_group` (
  6. `id` int(11) NOT NULL AUTO_INCREMENT,
  7. `cluster_id` int(11) NOT NULL,
  8. `topic_name` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  9. `consummer_group` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  10. `consummer_api` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  11. `threshold` int(11) DEFAULT NULL,
  12. `dispause` int(11) DEFAULT NULL,
  13. `mail_to` varchar(1000) COLLATE utf8_bin NOT NULL DEFAULT '',
  14. `webhook` varchar(1000) COLLATE utf8_bin NOT NULL DEFAULT '',
  15. `create_date` datetime DEFAULT NULL,
  16. `owner_id` int(11) DEFAULT NULL,
  17. `team_id` int(11) DEFAULT NULL,
  18. `disable_alerta` tinyint(1) DEFAULT 0,
  19. `enable` tinyint(1) NOT NULL DEFAULT 1,
  20. PRIMARY KEY (`id`)
  21. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  22. -- Data exporting was unselected.
  23. -- Dumping structure for table kafka_center.cluster_info
  24. CREATE TABLE IF NOT EXISTS `cluster_info` (
  25. `id` int(11) NOT NULL AUTO_INCREMENT,
  26. `name` varchar(255) COLLATE utf8_bin NOT NULL,
  27. `zk_address` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  28. `broker` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  29. `create_time` datetime DEFAULT NULL,
  30. `comments` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  31. `enable` int(11) DEFAULT NULL,
  32. `broker_size` int(4) DEFAULT 0,
  33. `kafka_version` varchar(10) COLLATE utf8_bin DEFAULT '',
  34. `location` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  35. `graf_addr` varchar(255) COLLATE utf8_bin DEFAULT '',
  36. PRIMARY KEY (`id`)
  37. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  38. -- Data exporting was unselected.
  39. -- Dumping structure for table kafka_center.ksql_info
  40. CREATE TABLE IF NOT EXISTS `ksql_info` (
  41. `id` int(11) NOT NULL AUTO_INCREMENT,
  42. `cluster_id` int(11) DEFAULT NULL,
  43. `cluster_name` varchar(255) DEFAULT NULL,
  44. `ksql_url` varchar(255) DEFAULT NULL,
  45. `ksql_serverId` varchar(255) DEFAULT NULL,
  46. `version` varchar(255) DEFAULT NULL,
  47. PRIMARY KEY (`id`)
  48. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  49. -- Data exporting was unselected.
  50. -- Dumping structure for table kafka_center.task_info
  51. CREATE TABLE IF NOT EXISTS `task_info` (
  52. `id` int(11) NOT NULL AUTO_INCREMENT,
  53. `cluster_ids` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  54. `location` varchar(20) COLLATE utf8_bin NOT NULL DEFAULT '',
  55. `topic_name` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  56. `partition` int(11) DEFAULT NULL,
  57. `replication` int(11) DEFAULT NULL,
  58. `message_rate` int(50) DEFAULT NULL,
  59. `ttl` int(11) DEFAULT NULL,
  60. `owner_id` int(11) DEFAULT NULL,
  61. `team_id` int(11) DEFAULT NULL,
  62. `comments` varchar(1000) COLLATE utf8_bin NOT NULL DEFAULT '',
  63. `create_time` datetime DEFAULT NULL,
  64. `approved` int(11) DEFAULT NULL,
  65. `approved_id` int(11) DEFAULT NULL,
  66. `approved_time` datetime DEFAULT NULL,
  67. `approval_opinions` varchar(1000) COLLATE utf8_bin DEFAULT '',
  68. PRIMARY KEY (`id`)
  69. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  70. -- Data exporting was unselected.
  71. -- Dumping structure for table kafka_center.team_info
  72. CREATE TABLE IF NOT EXISTS `team_info` (
  73. `id` int(11) NOT NULL AUTO_INCREMENT,
  74. `name` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  75. `own` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  76. PRIMARY KEY (`id`)
  77. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  78. -- Data exporting was unselected.
  79. -- Dumping structure for table kafka_center.topic_collection
  80. CREATE TABLE IF NOT EXISTS `topic_collection` (
  81. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  82. `cluster_id` int(11) NOT NULL,
  83. `user_id` int(11) NOT NULL,
  84. `name` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  85. `type` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  86. PRIMARY KEY (`id`)
  87. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  88. -- Data exporting was unselected.
  89. -- Dumping structure for table kafka_center.topic_info
  90. CREATE TABLE IF NOT EXISTS `topic_info` (
  91. `id` int(11) NOT NULL AUTO_INCREMENT,
  92. `cluster_id` int(11) NOT NULL,
  93. `topic_name` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  94. `partition` int(11) DEFAULT NULL,
  95. `replication` int(11) DEFAULT NULL,
  96. `ttl` bigint(11) DEFAULT NULL,
  97. `config` varchar(512) COLLATE utf8_bin DEFAULT NULL,
  98. `owner_id` int(11) DEFAULT NULL,
  99. `team_id` int(11) DEFAULT NULL,
  100. `comments` varchar(1000) COLLATE utf8_bin NOT NULL DEFAULT '',
  101. `create_time` datetime DEFAULT NULL,
  102. PRIMARY KEY (`id`)
  103. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  104. -- Data exporting was unselected.
  105. -- Dumping structure for table kafka_center.user_info
  106. CREATE TABLE IF NOT EXISTS `user_info` (
  107. `id` int(11) NOT NULL AUTO_INCREMENT,
  108. `name` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  109. `real_name` varchar(255) COLLATE utf8_bin DEFAULT '',
  110. `email` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  111. `role` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '100',
  112. `create_time` datetime DEFAULT NULL,
  113. `password` varchar(255) COLLATE utf8_bin DEFAULT '',
  114. PRIMARY KEY (`id`)
  115. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  116. -- Data exporting was unselected.
  117. -- Dumping structure for table kafka_center.user_team
  118. CREATE TABLE IF NOT EXISTS `user_team` (
  119. `id` int(11) NOT NULL AUTO_INCREMENT,
  120. `user_id` int(11) DEFAULT NULL,
  121. `team_id` int(11) DEFAULT NULL,
  122. PRIMARY KEY (`id`)
  123. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

2、配置

相关配置位于application.properties

可对端口 日志等信息做一些修改

  1. server.port=8080
  2. debug=false
  3. # 设置session timeout为6小时
  4. server.servlet.session.timeout=21600
  5. spring.security.user.name=admin
  6. spring.security.user.password=admin
  7. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/kafka_center?useUnicode=true&characterEncoding=utf-8
  8. spring.datasource.username=root
  9. spring.datasource.password=123456
  10. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  11. spring.datasource.type=com.zaxxer.hikari.HikariDataSource
  12. spring.datasource.hikari.minimum-idle=5
  13. spring.datasource.hikari.maximum-pool-size=15
  14. spring.datasource.hikari.pool-name=KafkaCenterHikariCP
  15. spring.datasource.hikari.max-lifetime =30000
  16. spring.datasource.hikari.connection-test-query=SELECT 1
  17. management.health.defaults.enabled=false
  18. public.url=http://localhost:8080
  19. connect.url=http://localhost:8000/#/
  20. system.topic.ttl.h=16
  21. monitor.enable=true
  22. monitor.collect.period.minutes=5
  23. monitor.elasticsearch.hosts=localhost:9200
  24. monitor.elasticsearch.index=kafka_center_monitor
  25. #是否启用收集线程指定集群收集
  26. monitor.collector.include.enable=false
  27. #收集线程指定location,必须属于remote.locations之中
  28. monitor.collector.include.location=dev
  29. collect.topic.enable=true
  30. collect.topic.period.minutes=10
  31. # remote的功能是为了提高lag查询和收集,解决跨location网络延迟问题
  32. remote.query.enable=false
  33. remote.hosts=gqc@localhost2:8080
  34. remote.locations=dev,gqc
  35. #发送consumer group的lag发送给alert service
  36. alert.enable=false
  37. alert.dispause=2
  38. alert.service=
  39. alert.threshold=1000
  40. alter.env=other
  41. #是否开启邮件功能,true:启用,false:禁用
  42. mail.enable=false
  43. spring.mail.host=
  44. spring.mail.username=KafkaCenter@xaecbd.com
  45. # oauth2
  46. generic.enabled=false
  47. generic.name=oauth2 Login
  48. generic.auth_url=
  49. generic.token_url=
  50. generic.redirect_utl=
  51. generic.api_url=
  52. generic.client_id=
  53. generic.client_secret=
  54. generic.scopes=

3、运行

推荐使用docker

  1. docker run -d -p 8080:8080 --name KafkaCenter -v ${PWD}/application.properties:/opt/app/kafka-center/config/application.properties xaecbd/kafka-center:2.1.0

不用docker

  1. $ git clone https://github.com/xaecbd/KafkaCenter.git
  2. $ cd KafkaCenter
  3. $ mvn clean package -Dmaven.test.skip=true
  4. $ cd KafkaCenter\KafkaCenter-Core\target
  5. $ java -jar KafkaCenter-Core-2.1.0-SNAPSHOT.jar

4、查看

访问http://localhost:8080 管理员用户与密码默认:admin / admin

功能介绍

Topics

用户可以在此模块完成Topic查看,已经申请新建Topic,同时可以对Topic进行生产消费测试。

Monitor

用户可以在此模块中可以查看Topic的生成以及消费情况,同时可以针对消费延迟情况设置预警信息。

Alerts

此模块用于维护预警信息。用户可以看到自己所有预警信息,管理员可以看到所有人的预警信息。

Kafka Connect

实现用户快速创建自己的Connect Job,并对自己的Connect进行维护。

KSQL

实现用户快速创建自己的KSQL Job,并对自己的Job进行维护。

Approve

此模块主要用于当普通用户申请创建Topic 或者Job时,管理员进行审批操作。

Setting

此模块主要功能为管理员维护User、Team以及kafka cluster信息

Cluster Manager

此模块用于管理员对集群的正常维护操作。

Home

这里是一些基本的统计信息

My Favorite

集群与topic列表

Topic

这里是一些topic的管理功能

Topic List

操作范围:

用户所属Team的所有Topic

  • Topic -> Topic List -> Detail 查看Topic的详细信息
  • Topic -> Topic List -> Mock 对Topic进行生产测试

申请创建topic

Important: admin不能申请task,普通用户必须先让管理员新建team后,将用户加入指定team后,才可以申请task。

操作范围:

用户所属Team的所有Task

  • Topic -> My Task -> Detail 查看申请的Task信息

  • Topic -> My Task -> Delete 删除被拒绝或待审批的Task

  • Topic -> My Task -> Edit 修改被拒绝的Task

  • Topic -> My Task -> Create Topic Task 创建Task

    • 按照表单各字段要求填写信息
    • 点击确认,提交申请

    审批结果:

    • 审批通过:Topic将会被创建在管理员指定的集群
    • 审批拒绝:用户收到邮件,返回到My Task,点击对应Task后面的Edit,针对审批意见进行修改

Topic命名规则:

只能包含:数字、大小写字母、下划线、中划线、点;长度大于等于3小于等于100。

不推荐:下划线开头;

可对所有Topic进行消费测试

Monitor

监控模块

生产者监控

消费者监控

消息积压

报警功能

Connect

这里是一些Connect的操作

KSQL

可以进行KQL的查询操作

Approve

这里主要是管理员做一些审核操作

  • Approve->check 审批用户的Task
  • 根据用户选择的location指定cluster
  • 检查用户设置的partition和replication大小是否合理,如不合理做出调整
  • 检查其他字段是否合理,如需要拒绝该申请,点击Reject并填写意见。

Kafka Manager
Topic管理

Cluster管理

broker管理

group管理

Setting

这些主要是用户的一些设置

KafkaCenter还是一个非常不错的kafka管理工具,可以满足大部分需求。

更多实时数据分析相关博文与科技资讯,欢迎关注 “实时流式计算”

一站式Kafka平台解决方案——KafkaCenter的更多相关文章

  1. 一站式自动化测试平台 http://www.Autotestplat.com

    Autotestplat 一站式自动化测试平台及解决方案 自动化平台开发 3.1 自动化平台开发方案 3.1.1 功能需求 支持 API.AppUI.WebUI 性能等自动化测试,集成实现测试用例管理 ...

  2. 又拍云SSL证书全新上线,提供一站式HTTPS安全解决方案

    互联网快速发展,云服务早已融入每一个人的日常生活,而互联网安全与互联网的发展息息相关,这其中涉及到信息的保密性.完整性.可用性.真实性和可控性.又拍云上线了与多家国际顶级 CA 机构合作的数款OV & ...

  3. 白瑜庆:知乎基于Kubernetes的kafka平台的设计和实现

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 自我介绍 我是知乎的技术中台工程师,现在是负责知乎的存储相关组件.我的分享主要基于三个,一个是简单 ...

  4. Redis一站式管理平台工具,支持集群创建,管理,监控,报警

    简介 Redis Manager 是 Redis 一站式管理平台,支持集群的创建.管理.监控和报警. 集群创建:包含了三种方式 Docker.Machine.Humpback: 集群管理:支持节点扩容 ...

  5. 一站式Flink&Spark平台解决方案——StreamX

    大家好,我是独孤风.今天为大家推荐的是一个完全开源的项目StreamX.该项目的发起者Ben也是我的好朋友. ****什么是StreamX,StreamX 是Flink & Spark极速开发 ...

  6. Moebius集群:SQL Server一站式数据平台

    一.Moebius集群的架构及原理 1.无共享磁盘架构 Moebius集群采用无共享磁盘架构设计,各个机器可以不连接一个共享的设备,数据可以存储在每个机器自己的存储介质中.这样每个机器就不需要硬件上的 ...

  7. Tapdata 实时数据融合平台解决方案(五):落地

    作者介绍:TJ,唐建法,Tapdata 钛铂数据 CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. 通过前面几篇文章,我们从企业数据整合与分 ...

  8. Tapdata 实时数据融合平台解决方案(四):技术选型

    作者介绍:TJ,唐建法,Tapdata 钛铂数据CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. 常见搭建数据中台的技术产品 数据中台包括: ...

  9. BPM协同平台解决方案分享

    一.需求分析 企业信息化的过程都是从单纯解决一个业务功能问题,到解决企业内部业务流程问题,再扩展到解决不同业务流程的关联互动问题, 核心是业务的集成和业务的协同,需要有一个统一的业务协同平台. 国内的 ...

随机推荐

  1. 报错:require_once cannot allocate memory----php,以前自己弄的稍微有点特殊的开发环境

    最近出现过一个问题,值得记录 类似于这样的报错的问题: Warning: require_once(/www/app/somecomponent.php): failed to open stream ...

  2. MapReduce基本认识

    MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算. 主要由Split.Map.Partition.Sort.Combine(需要自己写).Merge.Reduce组成,一般来 ...

  3. GitHub 如何忽略文件或者文件夹

    在我们开发项目的时候,往往会产生一些不必要的文件,我们会选择忽略他们,不提交到版本控制中,那我们该如何做呢? 步骤一:在项目根目录下,右键,git bash,在弹出的命令行输入框中输入命令:touch ...

  4. 记一次virtualbox和夜神模拟器冲突的问题

    今天装了夜神模拟器之后发现vbox打不开了,百度了一堆都说要什么重装系统啥的,我这边提示的是 “创建失败(被召者 RC: REGDB_E_CLASSNOTREG (0x80040154))” 先是用管 ...

  5. mysql闪回工具--binlog2sql实践

    DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚.传统恢复方法是利用备份重搭实例,再应用去除错误sql后的binlog来恢复数据.此法费时费力,甚至需要停机维护 ...

  6. HTTP 协议图解

    HTTP 协议是一个非常重要的网络协议,我们平时能够使用浏览器浏览网页,其中一个非常重要的条件就是HTTP 协议. 0,什么是网络协议 互联网的目的是分享信息,网络协议是互联网的重要组成部分. 在互联 ...

  7. 2019/02/16 STL容器 :栈

    一.栈(stack) 1.定义: 栈是一种只能在某一端插入和删除数据的特殊线性表.他按照先进先出的原则存储数据,先进的数据被压入栈底,最后进入的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后被压 ...

  8. ACM-ICPC 2019 山东省省赛总结

    五题手快拿银,不然拿铜,甚至不拿,从结果上来看拿了铜牌对第一年的我们来说算好的,也不算太好. 从拿奖后的第一天,我想写这篇博客,但是我忍了下来,那时候被喜悦冲昏了头脑,当 冷静下来,我开始打算写这篇博 ...

  9. python ——文件的操作大全,如with..as

    工作中遇到了需要对json文件进行增删内容操作的需要,于是系统性的整理了一下关于文件的基本操作这里的知识点: 结构:新建文件→打开文件→读取文件→关闭文件 一.基本文件操作 1.新建文件(打开文件), ...

  10. flask完成前后端分离实例

    需求:通过页面点击完成简单的投票系统功能. 相关文件: 设计思路: 1.前端:提供可以投票的入口.查询的入口.(前端不做数据处理,只做展示) 使用<a>  </a> 完成超链接 ...