{"id":18600153,"url":"https://github.com/mydataharbor/mydataharbor","last_synced_at":"2025-04-19T15:33:59.014Z","repository":{"id":44664152,"uuid":"387131150","full_name":"mydataharbor/mydataharbor","owner":"mydataharbor","description":":cn: MyDataHarbor是一个致力于解决任意数据源到任意数据源的分布式、高扩展性、高性能、事务级的数据同步中间件。帮助用户可靠、快速、稳定的对海量数据进行准实时增量同步或者定时全量同步，主要定位是为实时交易系统服务，亦可用于大数据的数据同步（ETL领域）。","archived":false,"fork":false,"pushed_at":"2024-08-22T12:53:19.000Z","size":7113,"stargazers_count":77,"open_issues_count":0,"forks_count":14,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-29T09:23:13.105Z","etag":null,"topics":["data","data-sync","elasticsearch","etl","java","jdbc","kafka","mysql","pipeline","redis"],"latest_commit_sha":null,"homepage":"https://mydataharbor.yuque.com/staff-tzwgrd/uqew9p","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mydataharbor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-18T08:51:23.000Z","updated_at":"2025-02-27T11:49:35.000Z","dependencies_parsed_at":"2024-08-12T03:06:14.076Z","dependency_job_id":null,"html_url":"https://github.com/mydataharbor/mydataharbor","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mydataharbor%2Fmydataharbor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mydataharbor%2Fmydataharbor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mydataharbor%2Fmydataharbor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mydataharbor%2Fmydataharbor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mydataharbor","download_url":"https://codeload.github.com/mydataharbor/mydataharbor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249727604,"owners_count":21316703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data","data-sync","elasticsearch","etl","java","jdbc","kafka","mysql","pipeline","redis"],"created_at":"2024-11-07T02:03:12.719Z","updated_at":"2025-04-19T15:33:58.983Z","avatar_url":"https://github.com/mydataharbor.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\t\u003cbr/\u003e\n  \u003ca href=\"http://www.mydataharbor.com\" target=\"_blank\"\u003e\n    \u003cimg  src=\"mydataharbor.png\" alt=\"logo\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n\n\u003cp align=\"center\" class=\"print-break\"\u003e\n    \u003ca href=\"https://mydataharbor.com\" style=\"display:inline-block\"\u003e\u003cwords type='updated' /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/mydataharbor/mydataharbor/actions/workflows/maven.yml\" target=\"_blank\" style=\"display:inline-block\" class=\"not-print\"\u003e\n       \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/mydataharbor/mydataharbor/maven.yml?branch=main\" alt=\"GitHub-CI\"\u003e\n    \u003c/a\u003e\n     \u003ca href=\"https://github.com/mydataharbor/mydataharbor/releases\" target=\"_blank\" style=\"display:inline-block\" class=\"not-print\"\u003e\n       \u003cimg src=\"https://img.shields.io/github/v/release/mydataharbor/mydataharbor\" alt=\"查看发行的版本\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://search.maven.org/search?q=com.mydataharbor\" target=\"_blank\" style=\"display:inline-block\" class=\"not-print\"\u003e\n       \u003cimg src=\"https://img.shields.io/maven-central/v/com.mydataharbor/mydataharbor\" alt=\"maven仓库\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/mydataharbor/mydataharbor/releases\" target=\"_blank\" style=\"display:inline-block\" class=\"not-print\"\u003e\n       \u003cimg src=\"https://img.shields.io/github/downloads/mydataharbor/mydataharbor/total\" alt=\"下载数量\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/mydataharbor/mydataharbor/blob/main/LICENSE\" target=\"_blank\" style=\"display:inline-block\" class=\"not-print\"\u003e\n       \u003cimg src=\"https://img.shields.io/github/license/mydataharbor/mydataharbor\" alt=\"开源协议\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://mydataharbor.yuque.com/books/share/d5b1360e-d316-4be0-85de-b0958ac64267/pckin3\" target=\"_blank\" style=\"display:inline-block\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/plugins-清单-blue\" alt=\"插件列表\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n欢迎前端、插件开发人员前来贡献代码，感兴趣的请联系我：1053618636@qq.com\n\n## 简介/定位\n\n:cn: 🚢 MyDataHarbor是一个致力于解决异构数据源之间的分布式、高扩展性、高性能、微事务（至少一次保证）、准实时的数据同步中间件。\n\n它可以帮助用户可靠、快速、稳定的对海量数据进行准实时增量同步或者定时全量同步，主要定位是为实时交易系统服务，亦可用于大数据的数据同步（ETL领域）。\n\n## 背景\n\n在微服务的大背景下，实时交易系统的数据的分散存储已经成为常态，然而有时候我们需要对这些数据进行实时或者定时全量的同步到另外一个地方。\n\n比如，一个公司的C部门的系统，需要用到A、B部门产生的数据，这时候避免不了进行全量或者增量的数据同步。再比如，数据库中的数据我要实时同步到elasticsearch、redis等等中进行搜索。\n\n数据同步的应用场景在日常的分布式系统开发中非常常见，而且非常重要，一旦数据同步出现问题，将会导致数据不一致，引起其他严重的异常。\n\n目前小公司的做法是在业务程序系统里修改代码，往目标数据源中写入数据，上点规模的公司的做法是，各个部门开发一套自己的同步小程序，没有管理，更可能没有监控，来一个需求开发一个、非常浪费资源，稳定性也得不到保障，而大公司则是有一套数据迁移平台（如阿里的精卫）。\n\nMyDataHarbor在这种场景需求下应用而生！\n\n## 特性\n\n ### 🚩分布式设计\n\n   MyDataHarbor是一个在zookeeper上构建的分布式中间件，支持水平扩展，对节点进行分组，各分组下的机器形成一个子集群，任务在子集群隔离范围内进行负载均衡，防止单点故障。\n\n ### 🚩插件式设计\n\n   高度合理的抽象、插件化的设计使得MyDataHarbor拥有很高扩展性，任何数据迁移的需求都可以通过开发插件完成。\n\n ### 🚩事务支持\n\n   MyDataHarbor设计之初就考虑到数据丢失问题，引入事务的支持保障数据不丢失！\n\n ### 🚩插件自描述\n\n   安装插件后中间件会自动识别这个插件的能力，并且生成用户UI友好的任务创建界面，不需要用户直接编写复杂的json配置。\n\n ### 🚩自由组合\n\n   MyDataHarbor支持从不同的插件中复用各种组件，形一个新的pipeline管道，并且这些都是可以通过可视化的方式进行。\n\n ### 🚩任务监控\n\n   对接java的jmx，每个任务都有详细的监控，实时查看任务的运行状态。\n\n ### 🚩批量支持\n\n   为可以批量进行提交的写入源预留批量接口通道，有效提升数据迁移速度，摩托变汽车。\n\n ### 🚩ForkJoin\n\n   对于DataSource无法多线程并发拉取的情况下（如jdbc游标取数据），内部引入forkjoin并发处理模型开启多线程处理，并且灵活的事务控制，让速度飞快的同时保证数据迁移的稳定、不丢失，汽车变高铁。\n\n## 设计\n\nMyDataHarbor唯一依赖的中间件是zookeeper，共有两个组件：mydataharbor-console、mydataharbor-server\n   ![集群设计](./doc/image/cluster-design.png)\n   ![节点任务设计](./doc/image/node-design.png)\n\n## 支持的插件\n\n详见  https://mydataharbor.yuque.com/staff-tzwgrd/uqew9p/pckin3\n\n## 快速开始\n\nMyDataHarbor的安装非常简单（启动前请先准备好zookeeper集群）：\n\n### 下载二进制包\n\n下载地址：[https://github.com/mydataharbor/mydataharbor/releases](https://github.com/mydataharbor/mydataharbor/releases)\n下载列表：\n\n      mydataharbor-console-xxx-bin.tar.gz\n      mydataharbor-server-xxx-bin.tar.gz\n\n\u003e xxx是发行的版本号\n\n### mydataharbor-console \n\n#### 解压\n\n ![image-20210812143819918](./doc/image/image-20210812143819918.png)\n\n#### 配置\n\n进入config目录，修改application.yml，主要修改如下配置 \n\n```yaml\nserver:\n  port: 8080 #console服务启动端口\nzk: 127.0.0.1:2181 #zk地址\n```\n\n#### 运行\n\nWindows系统下运行 start.bat\u003cbr\u003e\nLinux系统下运行 start.sh  关闭stop.sh \n\n\u003e start.sh 脚本支持 jmx、debug、status参数 如：\u003cbr\u003e\n\u003e  start.sh jmx   启动远程jmx支持 \u003cbr\u003e\n\u003e start.sh debug 开启远程debug方式启动 \u003cbr\u003e\n\u003e start.sh status 查看当前程序状态 \n\n### mydataharbor-server \n\n#### 解压\n\n![image-20210812144430744](./doc/image/image-20210812144430744.png)\n\n#### 配置\n\n修改config目录下的system.yml \n```yaml\nzk: [\"127.0.0.1:2181\"] #zk地址\nport: 1299 #server服务启动端口\ngroup: biz001 #该节点所属组\npluginRepository: http://127.0.0.1:8080 #插件仓库地址\n```\n#### 运行\nWindows系统下运行 start.bat\u003cbr\u003e\nLinux系统下运行 start.sh  关闭stop.sh \n\n\u003e start.sh 脚本支持 jmx、debug、status参数 如：\u003cbr\u003e\n\u003e  start.sh jmx   启动远程jmx支持 \u003cbr\u003e\n\u003e start.sh debug 开启远程debug方式启动 \u003cbr\u003e\n\u003e start.sh status 查看当前程序状态 \n\n#### 验证\n访问：mydataharbor-console  [http://127.0.0.1:8080](http://127.0.0.1:8080)\n是否可以看到刚刚启动的节点 \n ![image-20210812143819918](./doc/image/demo.png)\n\n## 其它\ndemo运行实例：http://demo.mydataharbor.com\n\n插件市场：https://www.mydataharbor.com/user/info.html\n\n文档(语雀)：[https://mydataharbor.yuque.com/staff-tzwgrd/uqew9p](https://mydataharbor.yuque.com/staff-tzwgrd/uqew9p)\n\n#### QQ群（**\u003cu\u003e*加群时需要验证项目star数，请star一下然后记下star数告诉管理员*\u003c/u\u003e**）\n\n![QQ群](./doc/image/qq-discuz.png)\n\n\n\n## 更新日志\n\n### 2.0.0版本\n\n1、新增 mydataharbor.ITaskStorage 接口，允许各组件在运行期持久化记录数据，并提供一个zookeeper的默认实现，每秒1次准实时同步，不影响性能。\n\n2、默认将任务的监控信息通过持久化接口近乎实时的展示在管理台\n\n3、任务修改重建功能\n\n4、调整rebalance算法，新机器加入，将转移当前管道数大于任务分配节点数的任务\n\n5、鉴于1.x使用用户可能较少，由于修复了一些拼写错误，接口名称变了，不再向1.x兼容，建议大家把任务移到2.x上，请谅解\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmydataharbor%2Fmydataharbor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmydataharbor%2Fmydataharbor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmydataharbor%2Fmydataharbor/lists"}