2.3离线数仓—增量表同步实现

本文详细介绍了如何通过Maxwell监控MySQL增量表,将变化数据经Kafka发送到Flume,最终存入HDFS的过程。配置包括Maxwell的表过滤、Kafka Topic设置,以及Flume的Source、Sink和Channel选择。测试和优化环节确保了数据准确无误地传输到HDFS,并提供了增量同步的总结和脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在确定了全量表使用DataX进行同步,增量表使用Maxwell进行同步,且学习了Maxwell相关使用方法之后,开始着手进行增量表数据同步的实现。

一、增量表数据同步

1.增量表数据通道

增量表的数据由Maxwell从MySQL数据库导出,经过Kafka、Flume最终导入到HDFS中
在这里插入图片描述
       Maxwell实时监控MySQL数据库中的增量表的变化,将发生变化的表的变更数据(JSON类型)发送到Kafka中对应表名的topic中,然后Flume将Kafka中一个topic的数发送到HDFS里。
       Maxwell是不支持直接往HDFS里发送数据的,而在大数据领域内,最常用而且支持的是Kafka。

二、MySQL—Maxwell—Kafka的实现

1.Maxwell配置

       先回顾一下,所有的增量表如下图所示:
在这里插入图片描述
       按照规划,总共有13张表需要进行增量同步,因此对Maxwell进行相应的配置,只同步这13张表。
       同时,为了方便起见,需要对Maxwell进行额外的配置,把对应表的变更数据发送到对应的topic中。

配置过程如下:
1)修改Maxwell配置文件config.proties:vim /opt/module/maxwell/config.properties,修改后参数配置如下:

log_level=info

producer=kafka
kafka.bootstrap.servers=hadoop102:9092,hadoop103:9092

#kafka topic动态配置
kafka_topic=%{
   table}
# mysql login info
host=hadoop102
user=maxwell
password=maxwell
jdbc_options=useSSL=false&serverTimezone=Asia/Shanghai

#表过滤,只同步特定的13张表
filter= include:gmall.cart_info,include:gmall.comment_info,include:gmall.coupon_use,include:gmall.favor_info,include:gmall.order_detail,include:gmall.order_detail_activity,include:gmall.order_detail_coupon,include:gmall.order_info,include:gmall.order_refund_info,include:gmall.order_status_log,include:gmall.payment_info,include:gmall.refund_payment,include:gmall.user_info

参数说明:
kafka.bootstrap.servers:尽量写多个地址,防止其中一个地址连接不上而出错
kafka_topic:这个参数是写入到的kafka的topic名称,可以是固定的也可以是动态的,例如 maxwell_%{database}_%{table} 这种写法会自动获取对应的database和table名称
filter:这是为了对表进行过滤,Maxwell只能监听某个数据库,不能指定监听某个数据库中的哪些表,这里过滤出来需要的表的名称
2)重启Maxwell

2.Maxwell—Kafka通道测试

在1中完成了Maxwell的配置,接着可以对整个增量表同步通道进行测试。
1)启动zookeeper和kafka集群
2)启动一个kafka consumer,消费任意一个上述的topic数据
3)生成模拟数据
4)观察Kafka是否能够消费到数据

三、Kafka—Flume—HDFS实现

1.Flume配置选取

       这里是将Kafka的数据传输到HDFS中,因此Source选取Kafka Source,Sink选取HDFS Sink,Channel选取File Channel。

2.Flume配置关键点

在这里插入图片描述
       因为Kafka中的数据是存放在13个topic中,因此Kafka Source需要订阅13个topic,然后将对应topic放到HDFS对应的路径上。

一个具体的实例如下:
在这里插入图片描述

3.Flume配置具体实现

1)创建Flume配置文件:vim job/kafka_to_hdfs_db.conf
2)配置文件内容如下:

#为各组件命名
a1.sources = r1
a1.channels = c1
a1.sinks = s1

tier1.sources.r1.type = org.apache.flume.source.kafka.KafkaSource
a1.sources.r1.batchSize = 5000    
a1.sources.r1.batchDurationMillis = 2000 
tier1.sources.r1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092,hadoop104:9092
tier1.sources.r1.kafka.topics = cart_info,comment_info,coupon_use,favor_info,order_detail_activity,order_detail_coupon,order_detail,order_info,order_refund_info,order_status_log,payment_info,refund_payment,user_info
a1.sources.r1.kafka.consumer.group.id = flume
a1.sources.r1.setTopicHeader = true
a1.sources.r1.topicHeader = topic
a1.sources.interceptors=i1
a1.sources.interceptors.i1.type=com.atguigu.flume.interceptor.db.TimestampInterceptor$Builder


a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /opt/module/flume/checkpoint/behavior1
a1.channels.c1.dataDirs = /opt/module/flume/data/behavior1/
a1.channels.c1.maxFileSize = 2146435071
a1.channels.c1.capacity = 1000000
a1.channels.c1.keep-alive = 6


a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /origin_data/gmall/db/${topic}_inc/%Y-%m-%d
a1.sinks.k1.hd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值