Skip to content

jackila/kronos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KRONOS

kronos是一个解决宽表、数据同步等问题的框架。如微服务体系中解决多数据源查询、缓存同步数据、数据同步、分库分表等

宽表的实现,社区有一些开源实现方案,如Netflix 推出数据同步和增强平台 Delta(未开源)、flink cdc。但上述框架多多少少都存在一些场景不适合或者侵入性较强等问题。

如:Delta需要业务编程嵌入式代码,侵入性较强,flink cdc无法解决es中嵌套结构数据同步问题

kronos的算法源自公司内部一个宽表自研框架,经公司内部的大量线上经验,之前工程设计实现存在的弊端导致某些问题无法根本性解决, 比如性能、N:1问题、读写库延迟、数据事件优先级问题、项目可维护性与成本变高等 因此产生了开发该框架的想法

特性

  • 支持数据实时同步
  • 多表异步数据源合并
  • 数据迁移

使用场景

image-20230106204121983

架构设计图

kronos.drawio

  • 数据源模拟flink cdc的框架实现结合Debezium实现
  • 算子数据流采用Disruptor实现

Building Kronos from Source

Prerequisites for building Kronos:

  • Unix-like environment (we use Linux, Mac OS X, Cygwin, WSL)
  • Git
  • Maven (we recommend version 3.2.5 and require at least 3.1.1)
  • Java 8 or 11 (Java 9 or 10 may work)
git clone https://github.com/jackila/kronos.git
cd kronos
mvn clean package -DskipTests

Kronos is now installed in build-target as kronos.jar.

How to use and show the view of result

  • 方式一:通过集成测试(需要docker环境),了解该框架

    • mvn test -Dtest=MySqlSourceExampleTest -DfailIfNoTests=false
  • 方式二:通过业务模拟demo,了解kronos使用方法(业务背景见案例

    • 运行mysqles服务
    • mysql服务应用build-target\example.sql
    • 运行服务java -jar kronos.jar example.yml
    • 原始数据 img
    • 数据结果(每个学生选择了哪门课程、课程的主讲老师是谁、获得课程的成绩) image-20230107024449312

代码格式化

我们使用 Spotless plugingoogle-java-format 一起格式化我们的 Java 代码。

你可以通过以下步骤来将 IDE 配置为在保存时自动应用格式设置:

  1. 下载 google-java-format plugin v1.7.0.6
  2. 打开 Settings → Plugins,点击齿轮图标并选择 "Install Plugin from Disk"。导航到下载的 zip 文件并选择它。
  3. 在插件设置中,启用插件并将代码样式更改为 "AOSP"(4 个空格的缩进)。
  4. 请记住不要将此插件更新为更高版本!
  5. 安装 Save Actions plugin
  6. 启用插件,以及 "Optimize imports" 和 "Reformat file"。
  7. 在 "Save Actions" 设置页面中,为 .*\.java 设置 "File Path Inclusion"。否则你将在编辑其他文件中意外的重新格式化。

Java 规范检查

IntelliJ 使用 Checkstyle-IDEA 插件在 IDE 中支持 checkstyle。

  1. 从 IntelliJ 插件存储库中安装 "Checkstyle-IDEA" 插件。
  2. 通过 Settings → Tools → Checkstyle 配置插件。
  3. 将 "Scan Scope" 设置为仅 Java 源(包括测试)。
  4. 在 "Checkstyle Version" 下拉菜单中选择 8.14 版本,然后单击 "apply"。此步骤很重要,请勿跳过!
  5. 在 "Configuration File" 窗格中,点击 "+" 图标添加新配置:
    1. 将 "Description" 设置为 Flink。
    2. 选择 "Use a local Checkstyle file" ,然后将其指向你存储库中 "tools/maven/checkstyle.xml" 文件。
    3. 选中 "Store relative to project location" 框,然后单击 "Next"。
    4. 将 "checkstyle.suppressions.file" 属性值配置为 "suppressions.xml",然后单击 "Next",然后单击 "Finish"。
  6. 选择 "Kronos" 作为唯一的激活配置文件,单击 "Apply",然后点击 "OK"。
  7. Checkstyle 现在将在编辑器中针对任何违反 Checkstyle 的行为发出警告。

插件安装完成后你可以通过 Settings → Editor → Code Style → Java → Scheme 下拉框旁边的齿轮图标,选择intellij IDEA code style XML, 直接导入 "tools/intellij-java-google-style.xml" 文件。

你可以通过打开 Checkstyle 工具窗口并单击 "Check Module" 按钮来扫描整个模块。扫描不应报告任何错误。

About

一个解决宽表的方案

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages