{"id":13487486,"url":"https://github.com/BriData/DBus","last_synced_at":"2025-03-27T22:31:19.833Z","repository":{"id":24251478,"uuid":"102686416","full_name":"BriData/DBus","owner":"BriData","description":"DBus","archived":false,"fork":false,"pushed_at":"2022-12-06T21:36:10.000Z","size":53187,"stargazers_count":1214,"open_issues_count":99,"forks_count":545,"subscribers_count":99,"default_branch":"master","last_synced_at":"2024-10-29T20:00:09.325Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://bridata.github.io/DBus/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BriData.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}},"created_at":"2017-09-07T03:22:47.000Z","updated_at":"2024-10-25T09:24:56.000Z","dependencies_parsed_at":"2023-01-14T07:45:28.363Z","dependency_job_id":null,"html_url":"https://github.com/BriData/DBus","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/BriData%2FDBus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BriData%2FDBus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BriData%2FDBus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BriData%2FDBus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BriData","download_url":"https://codeload.github.com/BriData/DBus/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222322034,"owners_count":16966433,"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":[],"created_at":"2024-07-31T18:00:59.949Z","updated_at":"2024-10-30T22:31:06.204Z","avatar_url":"https://github.com/BriData.png","language":"Java","funding_links":[],"categories":["Java","大数据"],"sub_categories":[],"readme":"---\nlayout: global\ndisplayTitle: Dbus 概览\ntitle: 概览\ndescription: Dbus文档首页 DBUS_VERSION_SHORT\n---\n\n### 背景\n\n企业中大量业务数据保存在各个业务系统数据库中，过去通常的同步数据的方法有很多种，比如：\n\n- 各个数据使用方在业务低峰期各种抽取所需数据（缺点是存在重复抽取而且数据不一致）\n- 由统一的数仓平台通过sqoop到各个系统中抽取数据（缺点是sqoop抽取方法时效性差，一般都是T+1的时效性）\n- 基于trigger或时间戳的方式获得增量的变更（缺点是对业务方侵入性大，带来性能损失等）\n\n这些方案都不能算完美，我们在了解和考虑了不同实现方式后，认为要想同时解决数据一致性和实时性，比较合理的方法应该是基于日志的解决方案，同时能够提供消息订阅的方式给下游系统使用。\n\nDBus（数据总线）项目就是应这个需求而生的， DBus专注于数据的收集及实时数据流计算，通过简单灵活的配置，无侵入的方式对源端数据进行采集，采用高可用的流式计算框架，对公司各个IT系统在业务流程中产生的数据进行汇聚，经过处理后转换成统一JSON的数据格式UMS，提供给不同下游客户订阅和消费，充当报表数据源、大数据分析数据源等。 目前DBus在公司内部广泛使用，支持oracle，mysql，log, RocketMQ等数据源，这次开源版本支持mysql数据源。\n\nDBus的主要潜在客户包括：\n\n- 数仓平台和数据分析平台\n- 实时营销决策\n- 实时报表展示\n- 异构数据实时同步\n- 其他实时性要求高的系统\n\n### 项目介绍\n\n- 项目名称：DBus 数据总线\n- 语言：java/js\n\n专注于数据的收集及实时数据流计算，通过简单灵活的配置，以无侵入的方式对源端数据进行采集，采用高可用的流式计算框架，对公司各个IT系统在业务流程中产生的数据进行汇聚，经过转换处理后成为统一JSON的数据格式（UMS），提供给不同数据使用方订阅和消费，充当数仓平台、大数据分析平台、实时报表和实时营销等业务的数据源。\n\n### 相关文档\n\n详细介绍 DBus请参考 [wiki](https://bridata.github.io/DBus/index.html)\n\n常见问题可参考 [FAQ](https://bridata.github.io/DBus/more-faq.html)\n\n系统介绍参考 [system architecture](https://bridata.github.io/DBus/more-system-architecture.html)\n\n### 系统架构和工作原理\n\nDBUS主要分为两个部分：貼源数据采集和多租户数据分发。两个部分之间以Kafka为媒介进行衔接。无多租户资源、数据隔离需求的用户，可以直接消费源端数据采集这一级输出到kafka的数据，无需再配置多租户数据分发。\n\n![GlobalOverview](docs/img/index/ds_and_projdispatch.png)\n\n### **1 DBUS源端数据采集**\n\nDBUS源端数据采集大体来说分为2部分：\n\n- 读取RDBMS增量日志的方式来 实时获取增量数据日志，并支持全量拉取；\n- 基于logtash，flume，filebeat等抓取工具来实时获得数据，以可视化的方式对数据进行结构化输出；\n\n以下为具体实现原理 ![system arch](docs/img/more-system-architecture.png)\n\n\n主要模块如下：\n\n- 日志抓取模块：从RDBMS的备库中读取增量日志，并实时同步到kafka中；\n- 增量转换模块：将增量数据实时转换为UMS数据，处理schema变更，脱敏等；\n- 全量抽取程序：将全量数据从RDBMS备库拉取并转换为UMS数据；\n- 日志算子处理模块：将来自不同抓取端的日志数据按照算子规则进行结构化处理；\n- 心跳监控模块：对于RDMS类源，定时向源端发送心跳数据，并在末端进行监控，发送预警通知；对于日志类，直接在末端监控预警。\n- web管理模块：管理所有相关模块。\n\n\n### **2 多租户数据分发**\n\n对于不同租户对不同源端数据有不同访问权限、脱敏需求的情形，需要引入Router分发模块，将源端貼源数据，根据配置好的权限、用户有权获取的源端表、不同脱敏规则等，分发到分配给租户的Topic。这一级的引入，在DBUS管理系统中，涉及到用户管理、Sink管理、资源分配、脱敏配置等。不同项目消费分配给他的topic。\n\n![route2Project](docs/img/index/route2Project.png)\n\n### 主要功能：\n\n- **无侵入方式接入多种数据源**： 业务系统无需任何修改，以无侵入性读取数据库系统的日志获得增量数据实时变化。目前RDBMS支持mysql，oracle数据源（Oracle数据源请参考Oracle相关协议）， 日志方面支持基于logstash，flume和filebeat的多种数据日志抽取方案。\n- **海量数据实时传输**： 使用基于Storm的流式计算框架，秒级延时，整体无单点保证高可用性。\n- **多租户支持：** 提供用户管理、资源分配、Topology管理、租户表管理等丰富的功能，可根据需求，为不同租户分配不同的源端表数据访问权限，应用不同的脱敏规则，从而实现多租户资源隔离、差异化数据安全。\n\n![grafana](docs/img/index/2intr_proj_mgr.png)\n\n![2intr_proj_table](docs/img/index/2intr_proj_table.png)\n\n![2intr_router_topo](docs/img/index/2intr_router_topo.png)\n\n- **感知源端schema变更**： 当源端发生schema变更时，能自动感知schema变化，调整UMS版本号，并通过Kafka消息和邮件通知下游![diff](docs/img/index/2intr_diff.png)\n\n- **数据实时脱敏**： 可根据需求对指定列数据进行实时脱敏。脱敏策略包括：直接替换、MD5、murmur等脱敏算法，脱敏加盐，正则表达式替换等。支持用户开发jar包实现DBUS未覆盖的个性化脱敏策略。 ![docs/encode](docs/img/index/2intr_encode.png)\n\n- **初始化加载**： 支持高效的初始化加载和重新加载，支持任意指定输出topic，灵活应对客户需求。 ![docs/fuller](docs/img/index/2intr_full.png)\n\n- **统一标准化消息传输协议**： 使用统一的UMS(JSON格式)消息schema格式输出便于消费，提供数据线级ums_id保证数据顺序性,输出insert,Update(before/after),Delete event数据。 ![ums](docs/img/index/2system-ums.png)\n\n- **可靠多路消息订阅分发**： 使用Kafka存储和传递消息保证可靠性和便捷的多用户订阅\n\n- **支持分区表/系列表数据汇集**： 支持分区表的数据汇集到一个“逻辑表” 。也可将用户自定义的系列表数据汇集到一个“逻辑表“。例：\n\n  ![grafana](docs/img/index/2intr_mergetable.png) \n\n- **实时监控\u0026预警**： 可视化监控系统能随时查看各数据线实时流量和延时状况；当数据线发生异常时，根据配置策略自动发邮件或短信通知相关负责人 \n\n  ![grafana](docs/img/index/2intr_grafana.png)\n\n# 其他\n\n##### 编译打包代码\n\n关于编译代码，参考 [compile](https://bridata.github.io/DBus/more-compile-code.html)\n\n##### 版本相关:\n\n建议版本：0.6.x\n\n下载发布包：请参考：[downloads](https://github.com/BriData/DBus/releases)\n\n##### 版权声明\n\nDBus 自身使用 Apache v2.0 协议\n\n关于DBus 自身协议，修改第三方包代码，以及三方包协议参考： [License](https://bridata.github.io/DBus/more-license.html)\n\n##### 其他相关资料:\n\n与开源项目 [Wormhole](https://github.com/edp963/wormhole) 项目搭配使用将是最佳选择。 \n\n参考：[如何基于日志，同步实现数据的一致性和实时抽取?](http://dbaplus.cn/news-21-872-1.html)\n\n参考： [基于可视化配置的日志结构化转换实现](http://dbaplus.cn/news-134-1860-1.html)\n\n参考：[实时敏捷大数据在宜信的实践](http://server.51cto.com/News-576556.htm) \n\n##### 交流和问题反馈:\n\n邮件交流： \n\n提交issue ： [issue](https://github.com/BriData/DBus/issues)\n\n## Get Help\n\nThe fastest way to get response from our developers is to send email to our mail list [edp_support@groups.163.com](mailto:edp_support@groups.163.com) or [bridata@126.com](mailto:bridata@126.com)\n\nand welcome to join our WeChat group for online discussion.\n\n![](docs/img/WeChat.jpg)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBriData%2FDBus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FBriData%2FDBus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBriData%2FDBus/lists"}