大数据 014数据集成调研
公司
- DataPipeline
- Fivetran
- 神策数据
- 日志易
- 数数科技
- Conviva
- GrowingIO
- TalkingData
- 友盟
- 袋鼠云
- 滴普
- 奇点云
- 七牛云
- 网易数帆
- 数梦工厂
- 海致BDP
- 明略科技
- 阿里dataphin
- 阿里datawork
- 阿里quickbi
- 腾讯数据中台
- 腾讯小马bi
- 盒子数据
- dataease
- davinci
- cboard
- datagear
一、 CDC数据库实时变化数据采集
实时同步最灵活的还是用kafka做中间转发,当数据发生变化时,记录变化到kafka,需要同步数据的程序订阅消息即可,需要研发编码支持。主要是订阅binlog日志,进行增量订阅&消费的业务。
1. canal
https://github.com/alibaba/canal 当前版本1.1.4
当前的canal开源版本支持5.7及以下的版本(阿里内部mysql 5.7.13, 5.6.10, mysql 5.5.18和5.1.40/48)
功能如下:
- 基于日志增量订阅&消费支持的业务:
- 数据库镜像
- 数据库实时备份
- 多级索引 (卖家和买家各自分库索引)
- search build
- 业务cache刷新
- 价格变化等重要业务消息
界面 https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart
常用架构mysql binlog+canal+kafka+flink+大数据存储
2. otter
代码库https://github.com/alibaba/otter
otter是在canal基础上又重新实现了可配置的消费者,使用otter的话,刚才说过的消费者就不需要写了,而otter提供了一个web界面,可以自定义同步任务及map表。非常适合mysql库之间的同步。
另外:otter已在阿里云推出商业化版本 数据传输服务DTS, 开通即用,免去部署维护的昂贵使用成本。DTS针对阿里云RDS、DRDS等产品进行了适配,解决了Binlog日志回收,主备切换、VPC网络切换等场景下的同步高可用问题。同时,针对RDS进行了针对性的性能优化。出于稳定性、性能及成本的考虑,强烈推荐阿里云用户使用DTS产品。
3. kafka_connect+debezium+debezium-ui
kafka-connect-ui docker安装landoop/kafka-connect-ui
kafka_connect https://docs.confluent.io/3.0.0/connect/ 提供写kafka,读kafka功能
debezium https://github.com/debezium/debezium 提供各种db binlog解析插件
debezium-ui https://github.com/debezium/debezium-ui 提供同步任务管理功能
3.1 kafka connector:
https://github.com/apache/ignite/tree/master/modules
Kafka Connector很多,包括开源和商业版本的。如下列表中是常用的开源Connector
name | HasSource | HasSink |
---|---|---|
fileStream | Source | Sink |
Jdbc | Source | Sink |
商业版 https://www.confluent.io/product/connectors/
3.2 debezium 提供的connector
Connector文档https://debezium.io/documentation/reference/1.5/connectors/mysql.html
- debezium-connector-mysql
- debezium-connector-oracle
- debezium-connector-postgres
- debezium-connector-sqlserver
- debezium-connector-mongodb
3.3. Kafka Connect的优点
- 对开发者提供了统一的实现接口
- 开发,部署和管理都非常方便,统一
- 使用分布式模式进行水平扩展,毫无压力
- 在分布式模式下可以通过Rest Api提交和管理Connectors
- 对offset自动管理,只需要很简单的配置,而不像Consumer中需要开发者处理
- 流式/批式处理的支持
- k8s支持
4. maxwell
http://maxwells-daemon.io/ 当前版本1.33.0
mysql-to-json kafka的生产者
https://github.com/zendesk/maxwell
二、 数据库离线数据采集同步
1. dataX
- 阿里巴巴开源的数据库同步工具
- 开发语言:java,spring
- dataX https://github.com/alibaba/DataX/blob/master/introduction.md
- 功能:把数据从A数据源同步到B数据源
- 数据源是:Mysql,Oracle,Postgresql,SQLServer,Hive,Hbase,mongodb, clickhouse,hdfs,hbase,kudu,mongodb
- 工作原理: 分成reader,writer
- reader:根据jdbc 和select sql读取 源数据库表
- writer: 根据jdbc 和insert/replace sql 写到目标数据库表中
- dataX web管理台:https://github.com/WeiYe-Jing/datax-web
- 体验地址:http://192.168.126.147:9527/index.html#/datax/project/jobProject admin/123456
类似一个小型的dolphin调度系统,dataX是它启动一个插件,每个同步任务需要启动一个dataX进程。 功能类似arfa数据同步功能,dataX充当了kafka角色
优点:集中管理数据同步任务,配置简单(2步即可,创建作业的配置文件(json格式配置reader,writer),启动执行配置作业),分布式执行,多数据源匹配,部署简单,常适合离线数据,增量数据可以使用一些编码的方式实现,
缺点:无法做实时同步,开源版不支持kafka,需要自己开发reader和writer插件 仅仅针对insert数据比较有效,update数据就不适合。缺乏对增量更新的内置支持,因为DataX的灵活架构,可以通过shell脚本等方式方便实现增量同步。
2. Sqoop
Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Sqoop导入:导入工具从RDBMS到HDFS导入单个表。表中的每一行被视为HDFS的记录。所有记录被存储在文本文件的文本数据或者在Avro和序列文件的二进制数据。
Sqoop导出:导出工具从HDFS导出一组文件到一个RDBMS。作为输入到Sqoop文件包含记录,这被称为在表中的行。那些被读取并解析成一组记录和分隔使用用户指定的分隔符。
Sqoop支持全量数据导入和增量数据导入(增量数据导入分两种,一是基于递增列的增量数据导入(Append方式)。二是基于时间列的增量数据导入(LastModified方式)),同时可以指定数据是否以并发形式导入。
3. Nifi
Apache NiFi 是一个易于使用、功能强大而且可靠的数据拉取、数据处理和分发系统,用于自动化管理系统间的数据流。它支持高度可配置的指示图的数据路由、转换和系统中介逻辑,支持从多种数据源动态拉取数据。
NiFi基于Web方式工作,后台在服务器上进行调度。 用户可以为数据处理定义为一个流程,然后进行处理,后台具有数据处理引擎、任务调度等组件。
几个核心概念:
- Nifi 的设计理念接近于基于流的编程 Flow Based Programming。
- FlowFile:表示通过系统移动的每个对象,包含数据流的基本属性
- FlowFile Processor(处理器):负责实际对数据流执行工作
- Connection(连接线):负责不同处理器之间的连接,是数据的有界缓冲区
- Flow Controller(流量控制器):管理进程使用的线程及其分配
- Process Group(过程组):进程组是一组特定的进程及其连接,允许组合其他组件创建新组件
4. kettle
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。 Kettle的Spoon有丰富的Steps可以组装开发出满足多种复杂应用场景的数据集成作业,方便实现全量、增量数据同步。缺点是通过定时运行,实时性相对较差。
三、 服务器日志数据采集工具
1. Flume
- 官网:https://flume.apache.org/
- 开发语言:java
2. Filebeat
- 官方文档https://www.elastic.co/guide/en/beats/filebeat/current/index.html
- 代码库:https://github.com/elastic/beats/tree/master/filebeat
- 开发语言:go
3. Logstash
- 代码库:https://github.com/elastic/logstash
- 开发语言: java
4. Fluentd
- 官方文档:http://docs.fluentd.org/articles/quickstart
- 开发语言:c,ruby
5. Chukwa
- 官网:https://chukwa.apache.org/
- 代码库:https://github.com/apache/chukwa
- 开发语言:java
6. Scribe
- 代码库https://github.com/facebookarchive/scribe
- 公司:facebook开发
- 开发语言:c,c++
7. logkit
- 官网: https://logkit-pro.qiniu.com
- 代码库:https://github.com/qiniu/logkit
- 文档:https://developer.qiniu.com/insight/4684/product_introduction
- 开发语言:go
- 公司:七牛云
- 对比:https://developer.qiniu.com/insight/4934/logkit-pro-compared-with-mainstream-collecting-component-function-performance
8. logtail
- 文档:https://help.aliyun.com/document_detail/28979.html
- 其他公司https://logtail.com/
- 开发语言:c++
- 公司:阿里云
- 不开源
9. jlogstash
- 代码:https://github.com/DTStack/jlogstash
- 开发语言:java
- 公司:袋鼠云
四、 Http数据采集
1. openResty+lua+libkafka
五、 终端数据采集
- PC web
- android
- ios
- 微信小程序
- mobile h5
- 第三方
六、 kafka集群数据同步工具
1. brooklin
- linked开源的工具,用来在kafka集群之间同步数据,用来替代kafka-mirror-maker
- https://github.com/linkedin/brooklin
- An extensible distributed system for reliable nearline data streaming at scale. fileConnector,kafkaConnector
- 功能:把多个数据源的内容通过brooklin写入到多个目的地,类似kafka-mirror-maker。
- 开发语言:java,gradle
- 组件:zookeepr,kafka,connector,provider
- 优点:架构新颖,可靠性好,部署简单
- 缺点:connector和provider比较少;管理麻烦,没有界面
七、 kafka集群管理工具
1. logi-KafkaManager
- https://github.com/didi/Logi-KafkaManager
- 滴滴开源的kafka集群管理工具
2. kafkaMonitor
3. kafkaManager
4. kafkaEagle
八、 数据集成管理服务
1. DBus
- 宜信开源的数据采集分发平台
- 项目文档 https://bridata.github.io/DBus/
- 项目代码https://github.com/BriData/DBus
- 采用cannal抓取数据库实时binlog日志
- 采用flume/filebeat采集日志文件
2. CDAP
- 一个开源的框架建立数据分析服务
- 项目代码https://github.com/cdapio/cdap
- 项目官网https://cdap.io/
- 项目文档https://cdap.atlassian.net/wiki/spaces/DOCS/