数仓采集通道的设计
数仓采集通道的设计
- 写在前面
- 方案一:
- 方案二:
- 方案三:
- 最终方案
写在前面
- 离线和实时数仓共用一套数据采集通道系统
- 数据采集存储到HDFS上
- 完全分布式(三台节点)
方案一:
❝(node01)Flume(TailDir Source) + Kafka Channel + HDFS Sink + Kafka --> Kafka(node02) ❞
架构图:
Kafka Channel有一个参数:parseAsFlumeAgent = true
,即数据以Event的方式发送给Kafka
Event 格式 :Header + Body
数据发送到HDFS Sink
,下游可以解析出Body数据,Event数据存储在node02节点的kafka主题TopicA中,离线数仓这样设计没有问题
但是对于实时数仓那个来说,header的数据是不需要的,这样就导致多存储了一些无用的数据
如果将参数parseAsFlumeAgent
设置为false,这样实时数仓就可以只读取到body的数据,看起来似乎就完美解决了这个问题,其实不然。
因为我们需要实现Flume中拦截器
的功能,而拦截器的实现需要结合header
来使用,故此种实时和离线共用的数据采集系统不合适,会丢失header数据。
方案二:
❝(node01)FLume(TailDir Source) + Kafka Channel + Kafka --> Kafka(node02) ❞
架构图:
参数parseAsFlumeAgent
设置为false
此方案数仓采集过程一共4个链路(数据传输环节) 如下图:
方案三:
❝(node01)FLume(TailDir Source) + Kafka Channel + Kafka Sink + Kafka --> Kafka(node02) ❞
架构图:
参数parseAsFlumeAgent
设置为false
上游:数据通过node01的Kafka Channel存储到node02的Kafka主题(只有body数据)中,再从Kafak主题中读取数据
下游:拦截器处理,利用Kafka Channel将数据从Kafak主题中读取出来,
此方案数仓采集过程一共3个链路(数据传输环节) 如下图:
❝与方案二相比,该方案节省一个Sink,节省一个数据传输环节,相应地提高了性能 ❞
最终方案
方案三的采集设计通道更符合本项目的需求,架构图:
❝结束! ❞
相关文章
- 学生数据库管理系统
- SpringDataJpa 用MySQL语句怎么分页,spring全家桶SpringDataJpa 用MySQL语句怎么分页
- Docker创建MySQL容器模板命令
- Elasticsearch对应MySQL的对应关系
- 使用SpringDataJpa保存(save)报错误:SQL Error: 1062, SQLState: 23000 控制台会报:Duplicate entry ‘数‘ for key ‘PRIMA
- Navicat Premium 连接sqlserver数据库时提示安装Client失败,解决方案
- Mysql查询当前用户所有数据库语句(SHOW DATABASES)
- MySQL语句-查看当前数据库有哪些表(SHOW TABLES)
- MySQL5.0版本以上新增的 information_schema 数据库是什么?
- MariaDB数据库备份之逻辑备份
- MariaDB数据库创建用户
- MariaDB数据库给用户授权
- MariaDB数据库刷新权限表命令
- MariaDB数据库删除用户命令
- PhpStudy 2016搭建-sqli-libs靶场
- MySQL手动注入步骤
- Pikachu靶场-SQL注入-数字型注入(post)过关步骤
- Pikachu靶场-SQL注入-字符型注入(get)过关步骤
- 利用SQL注入漏洞实现MySQL数据库读写文件
- Kali-工具-sqlmap常见用法